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

匹配双数据集相同ID,筛选满足日期差<21天的最近日期记录并标记

数据集说明

df1(id唯一)

iddate1
15/26/2022
29/15/2021
312/22/2021
51/19/2022
61/11/2022

df2(存在重复id)

iddate2
35/10/2022
35/26/2022
411/28/2020
412/18/2021
51/19/2022
612/11/2021
61/13/2022
62/01/2022
712/08/2020
812/08/2020
处理需求

匹配两个数据集中的相同id,为每个匹配到的id选择df2中与df1的date1日期差最小的date2;若该日期差小于21天,new_col标记为1,否则标记为0。预期结果如下:

预期结果

iddate1date2new_col
312/22/20215/10/20220
51/19/20221/19/20221
61/11/20221/13/20221
解决方案(Python pandas实现)
import pandas as pd

# 初始化数据集
df1 = pd.DataFrame({
    'id': [1,2,3,5,6],
    'date1': ['5/26/2022','9/15/2021','12/22/2021','1/19/2022','1/11/2022']
})
df2 = pd.DataFrame({
    'id': [3,3,4,4,5,6,6,6,7,8],
    'date2': ['5/10/2022','5/26/2022','11/28/2020','12/18/2021','1/19/2022','12/11/2021','1/13/2022','2/01/2022','12/08/2020','12/08/2020']
})

# 转换日期列为datetime类型
df1['date1'] = pd.to_datetime(df1['date1'])
df2['date2'] = pd.to_datetime(df2['date2'])

# 合并数据集,保留共同id的所有组合
merged = pd.merge(df1, df2, on='id', how='inner')

# 计算日期差绝对值(单位:天)
merged['date_diff'] = abs(merged['date1'] - merged['date2']).dt.days

# 按id分组,筛选出每组日期差最小的行
result = merged.loc[merged.groupby('id')['date_diff'].idxmin()]

# 生成new_col标记
result['new_col'] = (result['date_diff'] < 21).astype(int)

# 整理输出列并格式化日期显示
result = result[['id', 'date1', 'date2', 'new_col']]
result['date1'] = result['date1'].dt.strftime('%m/%d/%Y')
result['date2'] = result['date2'].dt.strftime('%m/%d/%Y')

print(result)
代码运行结果
iddate1date2new_col
312/22/202105/10/20220
501/19/202201/19/20221
601/11/202201/13/20221

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 12:57:20