如何在Pandas中找出两个不同索引DataFrame的完全相同列
找出索引不同的DataFrame中列名及对应位置值完全一致的共享列
解决方案
要筛选出两个索引不同的DataFrame中,列名共存且对应行位置(忽略索引)数值完全一致的列,可以按以下步骤实现:
- 提取两个DataFrame的共同列名(列名交集)
- 对每个共同列,重置索引后比较列的数值序列是否完全匹配
- 收集所有符合条件的列名
完整代码示例
import pandas as pd # 创建示例DataFrame data1 = {"col1": ["A", "B", "C", "D"], "col2": ["E", "F", "G", "H"], "col3": ["Z", "Z", "Z", "Z"], "col4": ["Q", "Q", "Q", "Q"]} df1 = pd.DataFrame(index=[0,1,2,3], data=data1) data2 = {"col1": ["A", "B", "C", "D"], "col2": ["E", "F", "G", "H"], "col3": ["Z", "Z", "Z", "X"]} df2 = pd.DataFrame(index=[4,5,6,7], data=data2) # 获取共同列名 common_cols = df1.columns.intersection(df2.columns) # 筛选对应位置值完全一致的列 matching_cols = [ col for col in common_cols if df1[col].reset_index(drop=True).equals(df2[col].reset_index(drop=True)) ] print(matching_cols) # 输出: ['col1', 'col2']
关键说明
df.columns.intersection():快速获取两个DataFrame都包含的列名,避免处理不存在的列reset_index(drop=True):重置列的索引为默认连续整数,消除原索引不同带来的影响,确保行位置一一对应Series.equals():判断两个列的所有数值是否完全相等,返回布尔值用于筛选
内容的提问来源于stack exchange,提问作者Luis_12345
相关产品推荐
相关产品推荐

