python - 合并两个带有共同值提示的数据框
问题描述
我有兴趣合并具有以下属性的两个数据框:-
1. 它们之间没有任何公共列,因此无法直接连接。
2.它们的大小不同。例如 df2 有 4 行,而 df1 有 3 行。
3.两者的合并点是df2中的“ArrivalDateCap”和df1中的“ArrivalDateTime”相关的日期值。
数据框如下:
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 点之后,如果 df2 最接近且小于“ArrivalDateCap”值,则将“ArrivalDateTime”列添加到该列。例如,对于“ArrivalDateCap” - 2021-09-20 18:00:00,选择的“ArrivalDateTime”将为“2021-09-20 16:37:00”。因此,这个“ArrivalDateTime”小于“ArrivalDateCap”但最接近。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_asof
withdirection='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
推荐阅读
- python - 查找子列表的特定结果
- c# - 当我在 ASP.NET CORE Razor 中添加时,我在 ASP.NET 之外创建的 Html 和 Css 不适合
- wordpress - Wordpress 在简码中插入参数?
- sql - 从由开始行和结束行分隔的单个表中选择特定行
- excel - 通过 VBA 打开源工作簿时 VLookups 不更新
- php - 我如何将 MYSQL ROW_NUMBER OVER 与 MYSQL Server 而不是 MariaDB 一起使用
- spring - 春天不登录
- sql - 划分数据 - 缓存
- javascript - 反应无法内联更改按钮的背景颜色
- python - create() 用相关表中的每一行填充 manytomany,而不是将其留空