如何在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
相关产品推荐
相关产品推荐

