You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:如何匹配并合并含双日期列的两个DataFrame

解决DataFrame区间匹配与合并问题

我明白你需要的是基于相同other_var和name,同时日期区间存在重叠的DataFrame匹配合并,这就给你一步步拆解解决方案:

第一步:先把日期列转成datetime类型

首先得把两个DataFrame里的日期字符串转换成可比较的datetime格式,不然没法做区间判断:

import pandas as pd

# 处理DataFrame A的日期列
df_a['start_date'] = pd.to_datetime(df_a['start_date'])
df_a['end_date'] = pd.to_datetime(df_a['end_date'])

# 处理DataFrame B的日期列
df_b['open_date'] = pd.to_datetime(df_b['open_date'])
df_b['close_date'] = pd.to_datetime(df_b['close_date'])

第二步:按共同字段内连接,缩小候选范围

先把两个DataFrame按other_var和name做内连接,这样只保留这两个字段完全匹配的行,减少后续筛选的工作量:

merged = pd.merge(df_a, df_b, on=['other_var', 'name'], how='inner')

第三步:筛选日期区间重叠的行

区间重叠的核心判断逻辑是:A的起始日期 ≤ B的结束日期,且A的结束日期 ≥ B的起始日期,用这个条件过滤出符合要求的行:

df_c = merged[(merged['start_date'] <= merged['close_date']) & (merged['end_date'] >= merged['open_date'])]

第四步:调整输出列顺序(可选)

如果需要和你示例里的列顺序完全一致,可以重新排列列:

df_c = df_c[['start_date', 'end_date', 'open_date', 'close_date', 'other_var', 'name']]

验证示例数据效果

把你提供的示例数据代入上述代码,运行后就能得到你期望的df_c结果:

start_date   end_date  open_date close_date other_var      name
0 2018-05-01 2018-05-01 2018-04-05 2018-10-01       7H  companyB
1 2018-05-04 2018-05-09 2018-05-03 2018-06-01       1H  companyB

关于性能的说明

你的数据集大概1000行,这种方法完全够用——先内连接再筛选的计算量很小,不会有性能瓶颈。如果后续数据量大幅增长(比如十万级以上),可以考虑用merge_asof或者区间索引优化,但目前的规模完全不需要额外调整。

内容的提问来源于stack exchange,提问作者Tony Pendleton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 08:32:54