【问题标题】:Pandas Merge DataFrames on similar dates (+-7 days)Pandas 在相似日期(+-7 天)合并 DataFrame
【发布时间】:2021-02-04 19:13:59
【问题描述】:

我有两个 Pandas DataFrames 并希望将它们合并到两个属性 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]

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

【问题讨论】:

    标签: pandas dataframe datetime merge


    【解决方案1】:

    如果没有看到可重现的示例,听起来您可能正在寻找 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'))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-08
      • 1970-01-01
      • 2017-09-19
      • 2014-04-03
      相关资源
      最近更新 更多