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

如何在Pandas中基于近似日期与姓名匹配合并列不同的DataFrame

解决Pandas DataFrame基于近似日期和姓名前缀的合并问题

步骤1:对齐姓名字段

df1的seller是短名,df2是全名,我们可以从df2的全名中提取空格分隔的第一个部分作为匹配用的短名:

# 从df2的全名提取短名,和df1的seller字段对齐
df2['seller_short'] = df2['seller'].str.split(' ', expand=True)[0]

步骤2:确保日期格式统一(若未完成)

如果还没将日期列转为datetime类型,执行以下代码:

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

步骤3:基于姓名匹配+近似日期筛选合并

先按短名合并两个DataFrame,再筛选出日期差值在允许范围内的行(示例中允许最多1天的日期差,可按需调整):

# 按姓名前缀初步合并
merged_temp = pd.merge(df1, df2, left_on='seller', right_on='seller_short', suffixes=('_df1', '_df2'))

# 筛选日期差≤1天的结果
merged_result = merged_temp[abs(merged_temp['date_df1'] - merged_temp['date_df2']) <= pd.Timedelta(days=1)]

# 清理临时字段(可选)
merged_result = merged_result.drop(columns=['seller_short'])

示例输出说明

执行后会得到符合条件的合并结果:

  • John(df1,2023-07-25)匹配John Russell(df2,2023-07-25)
  • Alice(df1,2023-07-26)匹配Alice Perry、Alice Mcgee(均为2023-07-26)
  • Bob(df1,2023-07-27)匹配Bob Foster(2023-07-27)
  • Alice(df1,2023-07-28)因与df2中Alice的日期差2天,会被过滤

额外提示

  • 若姓名匹配规则更复杂(如存在名在后的情况),可改用正则表达式提取目标部分,例如df2['seller_short'] = df2['seller'].str.extract(r'^(\w+)')
  • 可根据业务需求调整日期差值阈值,比如允许2天差则改为pd.Timedelta(days=2)
  • 若存在同短名多全名的情况,可进一步通过业务规则去重

内容的提问来源于stack exchange,提问作者Guilherme Henrique Favaro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 20:32:44