Pandas - 根据日期之间的时间戳插入连接两个数据帧

时间:2021-06-20 21:38:58

标签: python pandas dataframe numpy

我有两个具有匹配和不匹配时间戳的数据帧。我想加入两个数据帧,以便新数据帧包含来自两个数据帧的时间戳,而其他数据帧中的缺失数据设置为该数据帧的先前值。我想分析两个不同的数据集以检查它们在任何确切时间戳(时刻)的值

@Value
@Builder
public class CompleteParams {
    Supplier func;
    String param1;
    Boolean param2;
}

2 个答案:

答案 0 :(得分:1)

您可以使用pd.merge_asof

# sort dfs by timestamp:
df1 = df1.sort_values(by="Timestamp1")
df2 = df2.sort_values(by="Timestamp2")

x = pd.merge_asof(df1, df2, left_on="Timestamp1", right_on="Timestamp2")
y = pd.merge_asof(df2, df1, left_on="Timestamp2", right_on="Timestamp1")
df_out = pd.concat([x, y]).drop_duplicates()
df_out["Timestamp"] = df_out[["Timestamp1", "Timestamp2"]].max(axis=1)
print(df_out[["Data1", "Data2", "Timestamp"]])

打印:

  Data1 Data2      Timestamp
0     A     M  1623974400000
1     B     O  1623974400200
2     C     O  1623974400200
3     D     O  1623974400400
1     A     N  1623974400100
3     D     P  1623974400500

答案 1 :(得分:1)

在我看来,只有outer mergesort_valuesfillna forward

下面的代码

重命名列

DF1.rename(columns={'Timestamp1':'Timestamp'}, inplace=True)
DF2.rename(columns={'Timestamp2':'Timestamp'}, inplace=True)

合并

pd.merge(DF1,DF2, on='Timestamp', how='outer').sort_values(by='Timestamp').fillna(method='ffill')

结果

   Data1      Timestamp Data2
0     A  1623974400000     M
4     A  1623974400100     N
1     B  1623974400200     O
2     C  1623974400200     O
3     D  1623974400400     O
5     D  1623974400500     P