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

如何在Pandas中合并含重复ID的数据集并避免月份列重复?

解决Pandas合并时笛卡尔积与多Month列问题

你需要基于SubscriberId + MONTH双列进行合并,同时使用全外连接保留所有用户-月份组合,缺失数据自动留空,具体方案如下:

核心解决方案

如果两个表的用户ID列都是SubscriberId、月份列都是MONTH,直接修改merge的连接键和连接方式:

merged_df = pd.merge(df1, df2, on=['SubscriberId', 'MONTH'], how='outer')
  • on=['SubscriberId', 'MONTH']:同时匹配用户ID和月份,彻底避免单一ID匹配导致的笛卡尔积
  • how='outer':保留两个表中所有的(SubscriberId, MONTH)组合,某表中没有对应数据的字段会自动填充NaN(即留空)

适配月份列名不同的情况

如果df1和df2的月份列名不一致(比如df1是MONTH,df2是EMAIL_MONTH),用left_on和right_on指定对应列:

merged_df = pd.merge(
    df1, 
    df2, 
    left_on=['SubscriberId', 'MONTH'], 
    right_on=['SubscriberId', 'EMAIL_MONTH'], 
    how='outer'
)
# 删除多余的月份列
merged_df = merged_df.drop('EMAIL_MONTH', axis=1)

示例验证

假设你的数据如下:
df1(收入数据):

SubscriberIdMONTHINCOME
1012024-01500
1012024-02600
1022024-01300

df2(邮件数据):

SubscriberIdMONTHSENT_EMAILS
1012024-015
1022024-023
1032024-012

合并后结果:

SubscriberIdMONTHINCOMESENT_EMAILS
1012024-015005
1012024-02600NaN
1022024-01300NaN
1022024-02NaN3
1032024-01NaN2

完美匹配你需要的格式:单一MONTH列,对应字段填充,无数据处留空。

内容的提问来源于stack exchange,提问作者Carlos Manuel Arroyo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 16:55:08