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

如何按含重复值的id列合并两个Pandas DataFrame并对应日期列

解决方案:按ID分组添加行号后合并

要实现按ID对应日期序列的合并,核心是给每个ID下的记录添加组内序号,再通过ID和序号共同匹配,让同ID下的第N条预测日期对应第N条实际日期,不足的位置自动填充NA。

步骤1:为两个DataFrame添加组内序号

使用groupby('id').cumcount()生成每个ID内的行索引(从0开始):

import pandas as pd

# 原始数据
df1 = pd.DataFrame({
    'id': ['1', '1', '1', '2', '2', '2', '3', '3'],
    'predicted_date': ['2022-01-01', '2022-02-01', '2022-03-01', '2022-01-01', '2022-02-01', '2022-03-01', '2022-01-01','2022-02-01']
})

df2 = pd.DataFrame({
    'id': ['1', '1', '2', '2', '3', '3', '3', '3'],
    'actual_date': ['2022-01-02', '2022-02-02', '2022-03-02', '2022-01-02', '2022-02-02', '2022-03-02', '2022-01-02','2022-02-02']
})

# 添加组内序号
df1['seq'] = df1.groupby('id').cumcount()
df2['seq'] = df2.groupby('id').cumcount()

步骤2:按ID和序号合并

使用merge方法,指定on=['id', 'seq']并设置how='outer'保留所有记录,缺失值自动补NA:

merged_df = pd.merge(df1, df2, on=['id', 'seq'], how='outer')

# 可选:删除序号列,得到目标结构
merged_df = merged_df.drop('seq', axis=1)

最终结果

输出的merged_df结构如下:

idpredicted_dateactual_date
12022-01-012022-01-02
12022-02-012022-02-02
12022-03-01NaN
22022-01-012022-01-02
22022-02-012022-03-02
22022-03-01NaN
32022-01-012022-02-02
32022-02-012022-03-02
3NaN2022-01-02
3NaN2022-02-02

这样既实现了同ID下日期序列的对应,又保留了所有原始记录,缺失位置自动用NA填充。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 02:37:19