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

Pandas合并两个含匹配ID列的DataFrame,为DF1新增CODE列且行数不变

问题成因
  • 原有代码同时传入on='ID'和right_index=True参数,pandas执行合并时的匹配逻辑为:取DF1的ID列值匹配DF2的行索引,而非DF2自身的ID列。如果DF2的行索引和ID列取值没有一一对应,就会出现错误匹配,甚至产生多对一/一对多的匹配关系,最终导致合并后行数异常增加。
  • how='inner'的合并逻辑会过滤掉DF1中不存在于匹配端的ID,若要严格保证DF3行数和DF1完全一致,优先使用左连接how='left'更稳妥。
解决方案

方案1:直接按双表的ID列合并(最简便)

直接指定匹配列为两表共有的ID,无需关联索引:

DF3 = DF1.merge(DF2, on='ID', how='left')

因为DF2中每个ID对应唯一值,合并后DF3的行数会和DF1完全一致,且每行会自动匹配对应ID的CODE值。

方案2:通过索引匹配(适合需要将ID设为DF2索引的场景)

如果需要保留用右表索引匹配的逻辑,先将DF2的ID列设置为行索引再合并:

# 先将DF2的ID设为行索引
DF2_with_id_index = DF2.set_index('ID')
# 合并:左表用ID列匹配右表索引
DF3 = DF1.merge(DF2_with_id_index, left_on='ID', right_index=True, how='left')

合并后可执行len(DF3) == len(DF1)验证行数是否符合要求,返回True即为正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 15:45:01