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

Python中匹配两个Pandas DataFrame列名并筛选对应列的问题

解决Pandas按另一个DataFrame列名筛选列的问题

嘿,我懂你遇到的小麻烦了——你已经找对了获取匹配列名的方法,但还差最后一步把数据提取出来!

问题回顾

你有两个DataFrame:

  • df1 包含列 a、b、c、d,两行数据
  • df2 包含列 b、c,一行数据
    你需要通用地提取df1中与df2列名重叠的所有列(也就是b、c),同时保留df1的所有行,不需要硬编码列名。

正确的解决方案

df1.columns.intersection(df2.columns)确实能帮你拿到两个DataFrame共有的列名,但这只是一个列名的Index对象,你需要用它来筛选df1的列,而不是只打印这个Index本身。

完整代码示例

import pandas as pd

# 构造你的示例数据
df1 = pd.DataFrame([[1,2,3,4], [5,6,7,8]], columns=['a', 'b', 'c', 'd'])
df2 = pd.DataFrame([[12,13]], columns=['b', 'c'])

# 1. 获取两个DataFrame共有的列名
common_columns = df1.columns.intersection(df2.columns)

# 2. 用共有的列名筛选df1
result_df = df1[common_columns]

# 查看结果
print(result_df)

输出结果

b  c
0  2  3
1  6  7

更简洁的链式写法

如果想少写一行代码,也可以直接链式调用:

result_df = df1[df1.columns.intersection(df2.columns)]

为什么你之前的尝试没拿到数据?

df1.columns.intersection(df2.columns)返回的是列名的集合(Index类型),它本身不包含任何数据。只有把这个集合作为参数传给df1的列索引(也就是df1[xxx]的方括号里),Pandas才会帮你提取对应列的所有行数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:00:00