Python 匹配时间戳
我有两个时间戳相近的数据帧Python 匹配时间戳,python,pandas,numpy,timestamp,Python,Pandas,Numpy,Timestamp,我有两个时间戳相近的数据帧 DF1 Time A 2020-02-15 05:09:00 52 2020-02-15 05:19:00 12 2020-02-15 05:28:00 25 2020-02-15 05:49:00 36 第二桌 DF2 Time B 2020-02-15 05:09:00 0.2 2
DF1
Time A
2020-02-15 05:09:00 52
2020-02-15 05:19:00 12
2020-02-15 05:28:00 25
2020-02-15 05:49:00 36
第二桌
DF2
Time B
2020-02-15 05:09:00 0.2
2020-02-15 05:19:00 0.25
2020-02-15 05:29:00 0.35
2020-02-15 05:39:00 0.45
2020-02-15 05:49:00 0.24
2020-02-15 05:59:00 0.32
我想根据时间戳(紧密地,公差=2分钟)合并这两个数据帧。输出应该是
Time A B
2020-02-15 05:09:00 52 0.2
2020-02-15 05:19:00 12 0.25
2020-02-15 05:29:00 25 0.35
2020-02-15 05:39:00 NAN 0.45
2020-02-15 05:49:00 36 0.24
2020-02-15 05:59:00 NAN 0.32
我试着用
pd.merge_asof(DF2,DF1, on = "Time",allow_exact_matches=True)
也
但是,它没有提供我试图生成的输出。在这方面有人能帮我吗?在我这边,第二个代码似乎很有效:
pd.merge_asof(df2,df1, on='Time', tolerance=pd.Timedelta('2T'))
输出:
Time B A
0 2020-02-15 05:09:00 0.20 52.0
1 2020-02-15 05:19:00 0.25 12.0
2 2020-02-15 05:29:00 0.35 25.0
3 2020-02-15 05:39:00 0.45 NaN
4 2020-02-15 05:49:00 0.24 36.0
5 2020-02-15 05:59:00 0.32 NaN
Time A B
0 2020-02-15 05:09:00 52.0 0.20
1 2020-02-15 05:19:00 12.0 0.25
2 2020-02-15 05:29:00 25.0 0.35
3 2020-02-15 05:39:00 NaN 0.45
4 2020-02-15 05:49:00 36.0 0.24
5 2020-02-15 05:59:00 NaN 0.32
如果愿意,您可以使用列排列链接以交换A
,B
列:
pd.merge_asof(df2,df1, on='Time',
tolerance=pd.Timedelta('2T')
)[['Time','A','B']]
输出:
Time B A
0 2020-02-15 05:09:00 0.20 52.0
1 2020-02-15 05:19:00 0.25 12.0
2 2020-02-15 05:29:00 0.35 25.0
3 2020-02-15 05:39:00 0.45 NaN
4 2020-02-15 05:49:00 0.24 36.0
5 2020-02-15 05:59:00 0.32 NaN
Time A B
0 2020-02-15 05:09:00 52.0 0.20
1 2020-02-15 05:19:00 12.0 0.25
2 2020-02-15 05:29:00 25.0 0.35
3 2020-02-15 05:39:00 NaN 0.45
4 2020-02-15 05:49:00 36.0 0.24
5 2020-02-15 05:59:00 NaN 0.32
我不知道这个解决方案对你是否有效,但我得到了你所需要的答案 简言之,问题在于pd.merge\u asof的工作方式类似于left\u join。因此,保留值采用所使用的左侧数据帧的索引 在本例中,我尝试使用DF2作为左数据帧,然后重新排列列以保留输出结果,结果成功了
combined = pd.merge_asof(DF2, DF1, on='Time', tolerance=pd.Timedelta("120000ms"))
new_cols = ['Time','A', 'B']
combined = combined[new_cols]
得到了输出结果
Time A B
0 2020-02-15 05:09:00 52.0 0.20
1 2020-02-15 05:19:00 12.0 0.25
2 2020-02-15 05:29:00 25.0 0.35
3 2020-02-15 05:39:00 NaN 0.45
4 2020-02-15 05:49:00 36.0 0.24
5 2020-02-15 05:59:00 NaN 0.32