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

Python Pandas数据框连接问题:无法得到预期结果求助

问题分析与解决

问题描述

我有表A和表B,想要连接得到表C,尝试了以下代码但未得到预期结果:

C = pd.merge(A, B, how = 'inner', left_on = ['ID1', 'ID2', 'ID3'], right_on = ['IDA', 'IDB', 'IDC'])

表A数据

ID1ID2ID3ColorFlag
A11白色Y
B12黑色Y
A13绿色N
E23蓝色Y
D45蓝色N
C67红色N
F97黑色Y

表B数据

IDAIDBIDC
A11
F97
A13
D45

预期表C数据

ID1ID2ID3ColorFlag
A11白色Y
A13绿色N
D45蓝色N
F97黑色Y

问题原因与解决方法

你的代码逻辑方向正确,但执行后会保留表B的IDA、IDB、IDC列,和预期表C的结构不符。另外要确保两个表中用于连接的列数据类型完全一致(比如表A的ID2、ID3是数值型,表B的IDB、IDC也要是数值型,否则会匹配失败)。

修正方案1:合并后删除冗余列

执行合并后,删除表B带来的重复ID列:

C = pd.merge(A, B, how='inner', left_on=['ID1', 'ID2', 'ID3'], right_on=['IDA', 'IDB', 'IDC'])
# 删除表B的ID列
C = C.drop(columns=['IDA', 'IDB', 'IDC'])

修正方案2:先重命名表B的列再合并

先把表B的列名改成和表A一致,再合并,避免生成冗余列:

# 重命名表B的列
B_renamed = B.rename(columns={'IDA': 'ID1', 'IDB': 'ID2', 'IDC': 'ID3'})
# 按相同列名合并
C = pd.merge(A, B_renamed, how='inner', on=['ID1', 'ID2', 'ID3'])

额外检查点

如果合并后结果行数不对,检查:

  • 两个表中连接列的数据类型是否一致(可通过A.dtypes和B.dtypes查看)
  • 是否存在空格或隐藏字符(比如ID列的字符串前后有空格,可先用str.strip()处理)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 20:20:34