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

如何基于c_id匹配且日期差≤7天内连接两个Pandas DataFrame?

解决方案

要实现按c_id精确匹配且日期差≤7天的内连接,你需要先对同c_id的所有日期组合进行比较,再筛选符合条件的行,具体步骤如下:

步骤1:转换日期列类型

首先确保日期列是datetime类型,否则无法计算日期差:

import pandas as pd

# 读取数据
df1 = pd.read_csv("my_csv1.csv")
df2 = pd.read_csv("my_csv2.csv")

# 转换为datetime类型
df1['dt'] = pd.to_datetime(df1['dt'])
df2['r_dt'] = pd.to_datetime(df2['r_dt'])

步骤2:按c_id交叉匹配

先通过c_id将两个DataFrame做内连接,得到同一c_id下的所有日期组合:

# 按c_id合并,得到同c_id的所有日期对
merged = pd.merge(df1, df2, on='c_id', how='inner')

步骤3:计算日期差并筛选

计算dt和r_dt的日期差绝对值,筛选出≤7天的行:

# 计算日期差(天数)
merged['date_diff'] = abs(merged['dt'] - merged['r_dt']).dt.days

# 筛选日期差≤7的记录
filtered = merged[merged['date_diff'] <= 7]

步骤4:去重得到最终结果

由于同一df1的行可能匹配多个df2的行,需要去重保留唯一的df1记录:

# 提取需要的列并去重
result = filtered[['l_id', 'c_id', 'dt']].drop_duplicates()

# 输出结果
print(result)

为什么原代码不生效?

你原来的代码同时匹配c_id和精确日期(left_on=['c_id','dt'], right_on=['c_id','r_dt']),仅保留日期完全相同的行,无法满足“日期差≤7天”的模糊匹配需求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 02:20:39