python - 根据日期和序列号连接两个数据框?

标签 python pandas

我有两个数据框,如下所示:

df1 = pd.DataFrame({'serialNo':['aaaa','bbbb','cccc','ffff','aaaa','bbbb','aaaa'],
               'Name':['Sayonti','Ruchi','Tony','Gowtam','Toffee','Tom','Sayonti'],
               'testName':   [4402, 3747 ,5555,8754,1234,9876,3602],
               'moduleName':   ['singing', 'dance','booze', 'vocals','drama','paint','singing'],
               'endResult': ['WARNING', 'FAILED', 'WARNING', 'FAILED','WARNING','FAILED','WARNING'],
               'Date':['2018-10-5','2018-10-6','2018-10-7','2018-10-8','2018-10-9','2018-10-10','2018-10-8']})`

df2 = pd.DataFrame({'serialNo':['aaaa','bbbb','aaaa','ffff','xyzy','aaaa'],
               'Food':['Strawberry','Coke','Pepsi','Nuts','Apple','Candy'],
               'Work':   ['AP', 'TC','OD', 'PU','NO','PM'],
               'Date':['2018-10-1','2018-10-6','2018-10-2','2018-10-3','2018-10-5','2018-10-10']
               })

我想加入这两个,我可以通过这种方式实现:

result = pd.merge(df1,df2,on=['serialNo','Date'],how='inner')

但是我想对此进行一些更改,方式是两个数据框连接对日期列进行某种检查,即我想检查 df2['Date'] 是否在 df1[' 的 3 天内日期']。我不想添加单独的列来检查此条件,而是想动态执行此操作,以便在加入时检查此条件。我该如何实现这一目标?

最佳答案

您只能加入serialNo,然后过滤加入后的结果:

df1['Date'] = pd.to_datetime(df1['Date'])
df2['Date'] = pd.to_datetime(df2['Date'])

result = pd.merge(df1,df2,on='serialNo' ,how='inner')
result = result[result.Date_x.sub(result.Date_y).abs().dt.days.le(3)]

更新

根据下面的评论,删除 .abs() 链式方法并使用 . Between() 而不是 .le() :

result = result[result.Date_x.sub(result.Date_y).dt.days.between(0,3)]

关于python - 根据日期和序列号连接两个数据框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52707913/

相关文章:

python - 验证数据框是否包含列表字典中的内容

python - 发布日期、经理和关系

python - 是否有一种优雅的方法将别名映射到连接的数据文件中的真实实体名称?

python - 在 python pandas 中减去两个非数字数据帧

python - 将字符串转换为 HH :MM time in Python

python - 使用 InterX 函数转换为 python 时出现模块错误

python - 使用 Flask 和原生 Python 日志记录?

python - HTML 不反射(reflect) Beautiful Soup 浏览器中的网页内容

python - 函数返回值中的 dict[str, dict] 是什么意思?

python - 按 pandas 数据框中的字段分组