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

Pandas多重复键DataFrame左连接为空:实现两表关联需求

解决pandas左连接返回空DataFrame的问题

你遇到的空DataFrame问题,核心原因是没有指定正确的连接列:默认情况下pd.merge()会自动寻找两个DataFrame中名称相同的列作为连接键,但你的DataFrame A用的是B_id列,DataFrame B用的是ID列,列名不匹配导致无法关联数据,最终返回空结果。

两种可行的解决方法:

方法一:显式指定连接列(推荐,无需修改原DataFrame)

用left_on指定A的连接列,right_on指定B的连接列,同时保留how='left'确保A的所有行都被保留:

import pandas as pd

# 构造与你提供结构一致的示例数据
A = pd.DataFrame({
    'ID': [1, 2, 3],
    'Name': ['John', 'Emily', 'Erick'],
    'B_id': [123, 123, 321]
})

B = pd.DataFrame({
    'ID': [123, 321],
    'Model': ['M1', 'M2']
})

# 执行左连接
merged_df = pd.merge(A, B, left_on='B_id', right_on='ID', how='left')

# 处理重复ID列(可选:保留A的ID,删除B引入的ID)
merged_df = merged_df.drop(columns=['ID_y']).rename(columns={'ID_x': 'ID'})

执行后得到的结果完全符合你的预期:

IDNameB_idModel
1John123M1
2Emily123M1
3Erick321M2

方法二:重命名B的列后再连接

先把B的ID列重命名为B_id,让两个DataFrame有同名连接列,之后直接用on参数完成连接:

# 重命名B的ID列
B_renamed = B.rename(columns={'ID': 'B_id'})

# 执行左连接
merged_df = pd.merge(A, B_renamed, on='B_id', how='left')

这种方法不会产生重复的ID列,结果和方法一一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 18:52:41