我有两个数据框需要在两列上连接,其中一列是日期列。但是,日期不匹配,如下例所示。我在其他帖子上看到有人使用 merge_of 进行类似的示例,但是在这里不起作用我相信因为我还需要加入另一个非日期列(pty)。我想将最接近的 alert_dt 输出到之前的 inv_dt或与 inv_dt 相同。第一次为我发帖,所以如果有任何不清楚的地方,请告诉我。
数据帧 A:
alert_dt | 私人有限公司 |
---|---|
01/06/2020 | 一种 |
08/06/2020 | 一种 |
12/06/2020 | 一种 |
27/06/2020 | 一种 |
12/06/2020 | 乙 |
15/07/2020 | 乙 |
数据帧 B:
|inv_dt | pty| |-----------|----| | 07/06/2020| 一个 | | 14/06/2020| 一个 | | 27/06/2020| 一个 | | 12/07/2020| 乙 | | 15/08/2020| 乙 | 期望输出:
inv_dt | closest_alert_dt_before_inv_dt | 私人有限公司 |
---|---|---|
07/06/2020 | 01/06/2020 | 一种 |
14/06/2020 | 08/06/2020 | 一种 |
27/06/2020 | 27/06/2020 | 一种 |
12/07/2020 | 12/06/2020 | 乙 |
15/08/2020 | 15/07/2020 | 乙 |
我的输出在merge_asof
方法上有点不同:
df1['alert_dt'] = pd.to_datetime(df1['alert_dt'], dayfirst=True)
df2['inv_dt'] = pd.to_datetime(df2['inv_dt'], dayfirst=True)
df = pd.merge_asof(df2.sort_values('inv_dt'),
df1.sort_values('alert_dt'),
left_on='inv_dt',
right_on='alert_dt',
by='pty')
print (df)
inv_dt pty alert_dt
0 2020-06-07 A 2020-06-01
1 2020-06-14 A 2020-06-12
2 2020-06-27 A 2020-06-27
3 2020-07-12 B 2020-06-12
4 2020-08-15 B 2020-07-15
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句