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

如何基于多列合并两个pandas DataFrame且避免生成重复行

多公共键分组非唯一值场景下的DataFrame紧凑合并方案

核心问题:直接使用pd.merge按(A,B,C)三列合并时,若同一(A,B,C)分组在两张表中都有多条记录,会生成笛卡尔积(左表m行 × 右表n行),导致大量重复冗余行。

解决思路

给每张表的同一个(A,B,C)分组内的行添加组内顺序编号,合并时将(A,B,C)+组内编号共同作为合并键,即可实现同组val0、val1按顺序一一对应,无匹配值自动留空,不会产生笛卡尔积。

实现代码

# 给df1的每个(A,B,C)分组添加组内自增序号
df1['grp_idx'] = df1.groupby(['A','B','C']).cumcount()
# 给df2的每个(A,B,C)分组添加组内自增序号
df2['grp_idx'] = df2.groupby(['A','B','C']).cumcount()
# 按公共键合并,之后删除辅助序号列
res = pd.merge(df1, df2, how='outer', on=['A','B','C','grp_idx']).drop('grp_idx', axis=1)
# 可选:将NaN替换为空字符串,匹配你期望的输出格式
res = res.fillna('')

效果说明

生成的结果完全符合需求:

  • 同一(A,B,C)分组下的val0、val1紧凑排列,无重复值
  • 两张表中独有的(A,B,C)分组也会完整保留,对应缺失字段留空
  • 不会产生笛卡尔积冗余行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 02:39:03