python-3.x 通过比较两个不同数据框的两个date列和两个id列合并两个数据框

ntjbwcob  于 2023-02-17  发布在  Python
关注(0)|答案(1)|浏览(135)

我有两个 Dataframe df1和df2
DF1:
| 标识符|c_id|日|
| - ------|- ------|- ------|
| 1a|c1|2023年1月1日|
| 1b类|c1|二○二一年二月二十日|
| 1c|c2|二〇二二年十一月二十五日|
| 第1天|c2|2022年1月1日|
| 第1天|c2|二○二二年三月一日|
| 第1版|c3|2022年4月8日|
| 第1次|四碳|2022年6月12日|
以及
DF2:
| c_id|r_dt|
| - ------|- ------|
| c1|2023年1月1日|
| c1|2021年2月14日|
| c2|二〇二二年十一月二十五日|
| c2|2022年2月28日|
| c5|二〇二二年十一月十二日|
| 四碳|二○二二年六月六日|
我想要做的是,我想要两个 Dataframe 的c_id的精确匹配,然后,如果df1的"dt"小于"r_dt",则仅两个 Dataframe 合并。我想要以"内部"方式进行连接。
我的预期结果如下所示:结果_DF:
| 标识符|c_id|日|
| - ------|- ------|- ------|
| 1a|c1|2023年1月1日|
| 1b类|c1|二○二一年二月二十日|
| 1c|c2|二〇二二年十一月二十五日|
| 第1天|c2|2022年1月1日|
| 第1天|c2|二○二二年三月一日|
| 第1次|四碳|2022年6月12日|
我尝试了如下:

import pandas as pd
df1=pd.read_csv("my_csv1.csv")
df2=pd.read_csv("my_csv2.csv")

#merging
merge_df = pd.merge(df1,df2,how='inner',left_on=['c_id','dt'], right_on = ['c_id','r_dt'])

但这并没有给我确切的结果。它只是匹配确切的日期,它没有比较是否天差小于或等于7天或没有。请帮助。

vfh0ocws

vfh0ocws1#

分两步来做:先合并ID,然后过滤,如

merge_df = pd.merge(df1,df2,how='inner',left_on=['c_id'], right_on = ['c_id'])
merge_df = merge_df[(merge_df['dt'] - merge_df['r_dt']).dt.days.abs() < 7]

相关问题