我有两个具有匹配和不匹配时间戳的数据帧。我想加入两个数据帧,以便新数据帧包含来自两个数据帧的时间戳,而其他数据帧中的缺失数据设置为该数据帧的先前值。我想分析两个不同的数据集以检查它们在任何确切时间戳(时刻)的值
@Value
@Builder
public class CompleteParams {
Supplier func;
String param1;
Boolean param2;
}
答案 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 merge
。 sort_values
和 fillna 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