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

如何在Pandas中按两列合并DataFrame且不新增左表额外行数

问题原因

你使用merge产生额外行的核心原因是DF2中存在重复的(colA, colB)组合键:Pandas默认merge逻辑中,左表的单条记录如果匹配到右表的N条同键记录,会生成N条合并后的记录,也就是出现行数膨胀。

解决方案

先对DF2按(colA, colB)去重/聚合,保证每个组合键对应唯一的colE、colF值后再做合并,该方案是Pandas原生优化实现,效率远高于手动构造字典匹配。

方案1:保留重复键的指定行

如果需要保留每个(colA, colB)第一次/最后一次出现的记录,直接用drop_duplicates处理:

# keep='first' 保留每组首次出现的记录,调整为keep='last'则保留末次出现的记录
DF2_unique = DF2.drop_duplicates(subset=['colA', 'colB'], keep='first')
# 左连接合并,保证DF1的所有记录都被保留
result = pd.merge(DF1, DF2_unique, on=['colA', 'colB'], how='left')

方案2:按自定义规则聚合重复键

如果需要对重复键的colE、colF做求和、取最大值等统计计算,先做groupby聚合再合并:

# 示例为取每组colE的最大值、colF的最小值,可根据需求调整聚合规则
DF2_agg = DF2.groupby(['colA', 'colB'], as_index=False).agg(
    colE = ('colE', 'max'),
    colF = ('colF', 'min')
)
result = pd.merge(DF1, DF2_agg, on=['colA', 'colB'], how='left')

针对你给出的示例数据,调整keep参数即可匹配到你期望的colE、colF取值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 13:54:01