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