如何利用NumPy布尔数组筛选两个DataFrame的共同列名?
获取两个DataFrame的共同列名(使用NumPy布尔数组筛选Index)
这问题我熟!你已经通过(df2.columns).isin(df1.columns)得到了判断列是否重叠的布尔数组,接下来只需要用这个数组直接索引你的Index对象,再转成列表就搞定了:
import pandas as pd import numpy as np a = [{'A': 3, 'B': 5, 'C': 3, 'D': 2},{'A': 2, 'B': 4, 'C': 3, 'D': 9}] df1 = pd.DataFrame(a) b = [{'F': 0, 'M': 4, 'B': 2, 'C': 8 },{'F': 2, 'M': 4, 'B': 3, 'C': 9}] df2 = pd.DataFrame(b) # 生成布尔数组 bool_mask = df2.columns.isin(df1.columns) # 用布尔数组筛选Index,转成列表 common_columns = df2.columns[bool_mask].tolist() print(common_columns) # 输出: ['B', 'C']
为什么这样可行?
Pandas的Index对象支持布尔索引,和你平时筛选Series/DataFrame的逻辑完全一致——布尔数组中True对应的位置会被保留,False的位置会被过滤掉。最后调用.tolist()就能把筛选后的Index转换成普通的Python列表。
额外技巧:更简洁的替代方法
如果你不需要手动处理布尔数组,其实还有更直接的方式获取共同列名:
- 用集合交集:
common_columns = list(set(df1.columns) & set(df2.columns)) - 用Pandas原生的
intersection方法(推荐,因为会保留列的原始顺序):common_columns = df1.columns.intersection(df2.columns).tolist()
内容的提问来源于stack exchange,提问作者cardamom
相关产品推荐
相关产品推荐

