合并两个数据帧,并使用一些公共值提示



我有兴趣合并两个数据帧与以下属性:-

1。它们之间没有任何公共列,因此直接连接是不可能的。

2。它们的大小不同。例如df2有4行,df1有3行。

3。两者的合并点是与"ArrivalDateCap"相关的日期值。in df2 and '; arrivaldatetime ';在df1。

数据帧如下:

df1  = {'ID1': ['A12', 'A13', 'A14'], 'ArrivalDateTime': ["2021-09-20 16:37", "2021-09-21 03:10", "2021-09-26 03:10"]} 
df2  = {'ID': ['001', '002', '003','004'], 'ArrivalDateCap': ["2021-09-20 18:00", "2021-09-21 18:00", "2021-09-20 18:00","2021-09-25 16:00"]}  

df1 = pd.DataFrame(df1)  
df1["ArrivalDateTime"] = pd.to_datetime(df1["ArrivalDateTime"],format="%Y-%m-%d %H:%M") 
df2 = pd.DataFrame(df2)
df2["ArrivalDateCap"] = pd.to_datetime(df2["ArrivalDateCap"],format="%Y-%m-%d %H:%M") 

在上面第3点之后,列"到达日期时间";如果它是最近的且小于"ArrivalDateCap",则添加到df2中。价值。例如对于"ArrivalDateCap"- 20121-09-20 18:00:00,所选的"到达日期时间";将是"2019-09-20 16:37:00"。因此,这个"arrivaldatetime"小于"到达日期"但是最接近的。df3的输出应该如下所示:-

df3  = {'ID': ['001', '002', '003','004'], 'ArrivalDateCap': ["2021-09-20 18:00", "2021-09-21 18:00", "2021-09-20 18:00","2021-09-25 16:00"],'ArrivalDateTime':['2021-09-20 16:37:00','2021-09-21 03:10:00','2021-09-20 16:37:00','2021-09-26 03:10:00'],'ID1':['A12','A13','A12','A14']}  
df3 = pd.DataFrame(df3)  

我假设'ArrivalDateCap'和'ArrivalDateTime'列的比较,并在另一个数据帧中记录结果,如果它们匹配条件(小于和最接近)是有意义的。我该如何实现它呢?提前谢谢你。

使用pd.merge_asofdirection='nearest'得到最接近的匹配

df3 = pd.merge_asof(df2.sort_values('ArrivalDateCap'), 
df1.sort_values('ArrivalDateTime'),
left_on='ArrivalDateCap', right_on='ArrivalDateTime',
direction='nearest')

输出:

>>> df3
ID      ArrivalDateCap  ID1     ArrivalDateTime
0  001 2021-09-20 18:00:00  A12 2021-09-20 16:37:00
1  003 2021-09-20 18:00:00  A12 2021-09-20 16:37:00
2  002 2021-09-21 18:00:00  A13 2021-09-21 03:10:00
3  004 2021-09-25 16:00:00  A13 2021-09-21 03:10:00

最新更新