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

如何在Pandas Merge时避免自动生成key_0列?

问题描述

合并两个列名不同的DataFrame时,不想修改原有列名,但合并后自动生成了key_0列。希望不通过重命名连接列或额外执行drop操作,直接通过merge的参数避免生成该列。

示例代码如下:

import pandas as pd

dict_1 = {'Col1':['A1','A2','A3','A4','A1','A3','A4'],
        'Col2':['B1','B1','B2','B3','B2','B4','B4'],
        'Col3':[i for i in range(10,17)],
        'Col4':[i for i in range(20,27)],
        'Col5':[i for i in range(30,37)],
        'Col6':[i for i in range(40,47)]}

dict_2 = {'Col11':['A1','A2','A1','A4'],
        'Col12':['C1','C2','C4','C3'],
        'Col13':[i for i in range(12,16)],
        'Col14':[i for i in range(21,25)],
        'Col15':[i for i in range(32,36)],
        'Col16':[i for i in range(41,45)]}

df_1 = pd.DataFrame(dict_1)
df_2 = pd.DataFrame(dict_2)

原合并代码:

pd.merge(left=df_1,right=df_2['Col12'],left_on=df_1['Col1'],right_on=df_2['Col11'],how='left',suffixes=(None,None))
解决方案

你之所以会生成额外的key_0列,根源是给left_on和right_on传递的是Series对象(比如df_1['Col1']、df_2['Col11']),而非列名的字符串。当merge用Series作为连接键时,pandas会自动把这个临时键存成key_0列。

要直接避免这个问题,只需要把left_on和right_on改成对应列名的字符串,同时调整right参数,让它包含连接列(Col11)和你需要的Col12列:

# 修正后的合并代码
result = pd.merge(
    left=df_1,
    right=df_2[['Col11', 'Col12']],  # 只保留需要的连接列和目标列
    left_on='Col1',  # 用列名字符串替代Series
    right_on='Col11',
    how='left',
    suffixes=(None, None)
)

这样合并后的结果只会保留两个原DataFrame的列,不会出现key_0。

如果你的需求只是把df_2的Col12匹配到df_1上,也可以用map的方式,代码更简洁:

# 单列匹配的简化写法
df_1['Col12'] = df_1['Col1'].map(df_2.set_index('Col11')['Col12'])

内容的提问来源于stack exchange,提问作者Rajib Lochan Sarkar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 18:45:48