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

Pandas合并DataFrame:筛选列并保留共索引行的实现方法

嘿,这个需求在Pandas里其实很好实现,我给你两种常用的方案,还有关键细节要注意:

核心思路拆解

我们需要同时完成三个动作:

  • 按索引合并两个DataFrame
  • 只保留双方索引都存在的行(也就是内连接)
  • 剔除不需要的列(最好提前筛选,比合并后删除更高效)

方案一:用pd.merge()(灵活可控,适合精准指定列)

pd.merge()是Pandas里最通用的合并工具,通过指定索引作为连接键,再配合内连接参数,就能轻松搞定。而且我们可以提前只取出需要的列,避免后续删列的麻烦:

import pandas as pd

# 先模拟两个示例DataFrame
df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}, index=['x', 'y', 'z'])
df2 = pd.DataFrame({'C': [7, 8, 9], 'D': [10, 11, 12]}, index=['y', 'z', 'w'])

# 合并操作:按索引内连接,只保留需要的列
# 比如我们要保留df1的A列,df2的C列
merged_df = pd.merge(
    df1[['A']],  # 只提取df1中需要的列
    df2[['C']],  # 只提取df2中需要的列
    left_index=True,  # 左表用索引作为连接键
    right_index=True, # 右表用索引作为连接键
    how='inner'       # 内连接:只保留双方都有的索引行
)

print(merged_df)
# 输出结果:
#    A  C
# y  2  7
# z  3  8

如果合并后才发现有多余列,也可以用drop()快速删除:

# 比如删除合并后不需要的B、D列
merged_df = merged_df.drop(columns=['B', 'D'])

方案二:用DataFrame.join()(简洁高效,专为索引合并设计)

join()是Pandas专门为按索引合并设计的方法,语法更简洁,默认按索引连接,只要把how参数设为inner就能保留共同索引的行:

# 同样只保留需要的列,内连接合并
merged_df = df1[['A']].join(df2[['C']], how='inner')

关键注意点

  • 一定要设置how='inner':如果用默认的how='left',会保留左表所有索引行,右表没有的会填充NaN,这不符合我们要“仅保留双方都存在的行”的需求
  • 提前筛选列更高效:尤其是处理大数据集时,提前只取出需要的列,能减少内存占用和合并时间

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:45:14