熊猫在相似的日期(+ -7天)合并数据帧

时间:2020-10-21 20:00:17

标签: pandas dataframe datetime merge

我有两个Pandas DataFrame,想将它们合并到两个属性keydate上,其中date是日期时间,如果第二个日期是第二行,则应该合并两行表距第一个表中的日期有+ -7天的时间。

当前,我先合并数据帧,然后再选择匹配的行,但这很慢,并且会导致庞大的中间表:

res = pd.merge(left, right, on=['key'], how='inner')

mask = (
    ((res['date_x'] + pd.Timedelta(0, 'days')) <= (res['date_y'] + pd.Timedelta(7, 'days'))) &
    ((res['date_x'] - pd.Timedelta(0, 'days')) >= (res['date_y'] - pd.Timedelta(7, 'days')))
)

res = res.loc[mask]

是否有更快的方法来达到相同的结果,例如条件合并?

1 个答案:

答案 0 :(得分:2)

没有看到可重复的示例,听起来您可能正在寻找merge_asof函数(如果我正确理解了您的问题)。 https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.merge_asof.html应该类似于:

pd.merge_asof(left, right, on="date", by="key", tolerance=pd.Timedelta(7, 'days'))