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

如何在Pandas左连接后移除右侧关联列并选择指定合并列?

解决方案:合并时直接筛选所需列,避免多余列输出

当然不用非得执行df_merge.drop(columns='cities')!我们可以在合并操作前就精准控制要从右侧数据集(df2)中提取的列,既避免后续清理步骤,还能提升代码效率(尤其是处理大数据集时)。

针对你的示例场景

你的核心需求是:用df1的city和df2的cities做左连接,但只需要df2里的temp列,不想让cities出现在最终结果里。可以这么做:

import pandas as pd

df1 = pd.DataFrame({
    "city": ['new york','chicago', 'orlando','ottawa'],
    "humidity": [35,69,79,99]
})

df2 = pd.DataFrame({
    "cities": ['new york', 'chicago', 'toronto'],
    "temp": [1, 6, -35]
})

# 1. 先把df2的关联列重命名为和df1一致的名称,同时筛选出需要的列
df2_selected = df2.rename(columns={"cities": "city"})[["city", "temp"]]
# 2. 执行左连接,此时结果里就不会有多余的cities列了
df_merge = df1.merge(df2_selected, on='city', how='left')

print(df_merge)

执行后输出:

city  humidity  temp
0  new york        35   1.0
1   chicago        69   6.0
2   orlando        79   NaN
3    ottawa        99   NaN

处理df2有大量列的场景(比如30列只需要10列)

当df2列数很多时,只要明确两个关键点:

  • 必须保留关联列(比如这里的cities)用来做连接
  • 加上你需要的10列

比如假设你需要df2里的temp、pressure、wind_speed...(共10列),可以这么写:

# 列出所有需要的列:关联列 + 业务列
needed_columns = ["cities", "temp", "pressure", "wind_speed", ...]  # 补全你的10列
df2_selected = df2[needed_columns].rename(columns={"cities": "city"})
df_merge = df1.merge(df2_selected, on='city', how='left')

为什么这比合并后drop更优?

  • 减少内存占用:合并前就筛选列,避免把不需要的列加载到内存里,大数据集下效果明显
  • 代码更清晰:一步到位,后续维护时能直接看到你需要哪些列,不用猜为什么要drop某列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:05:39