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

如何在Pandas合并DataFrame时避免右表连接列出现在输出结果中?

解决Pandas合并后移除右表连接列的简洁方法

当然有更简便的方式!不用事后单独删除列,你可以通过几种链式操作或者预处理的方式一步到位得到目标结果,下面是几个常用方案:

方案1:合并前重命名右表连接列,统一连接键名

把df2的Name_child重命名为和df1一致的Name,这样合并时直接用on='Name',就不会生成重复的连接列:

import pandas as pd
age = [['tom', 10], ['nick', 15], ['juli', 14]]
df1 = pd.DataFrame(age, columns=['Name', 'Age'])
toy = [['tom', 'GIJoe'], ['nick', 'car']]
# 重命名后再合并
df2 = pd.DataFrame(toy, columns=['Name_child', 'Toy']).rename(columns={'Name_child': 'Name'})
df = pd.merge(df1, df2, on='Name', how='left')

此时df.columns就是你想要的Index(['Name', 'Age', 'Toy'], dtype='object'),全程无多余列生成。

方案2:合并后直接筛选目标列(链式调用)

如果不想修改原df2的结构,可以在合并完成后直接通过列索引筛选你需要的列,写成一行代码:

import pandas as pd
age = [['tom', 10], ['nick', 15], ['juli', 14]]
df1 = pd.DataFrame(age, columns=['Name', 'Age'])
toy = [['tom', 'GIJoe'], ['nick', 'car']]
df2 = pd.DataFrame(toy, columns=['Name_child', 'Toy'])
# 合并后直接选择列
df = pd.merge(df1, df2, left_on='Name', right_on='Name_child', how='left')[['Name', 'Age', 'Toy']]

这种方式很直观,明确指定最终要保留的列,代码紧凑。

方案3:合并后链式调用drop移除多余列

和你原来的删除思路类似,但把删除操作和合并写在一行,更简洁:

import pandas as pd
age = [['tom', 10], ['nick', 15], ['juli', 14]]
df1 = pd.DataFrame(age, columns=['Name', 'Age'])
toy = [['tom', 'GIJoe'], ['nick', 'car']]
df2 = pd.DataFrame(toy, columns=['Name_child', 'Toy'])
# 合并后立即drop多余列
df = pd.merge(df1, df2, left_on='Name', right_on='Name_child', how='left').drop('Name_child', axis=1)

这种方式不需要修改原数据结构,也省去了单独的del语句。

推荐优先用方案1或方案2,前者避免了多余列的生成,后者更清晰可控,根据你的实际场景选择就好~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 04:27:31