如何对比两个同结构Pandas DataFrame的列差异?
解决DataFrame列级相等性检查的问题
没问题,我来帮你搞定这个列级差异检查的需求!你之前用的(df1 != df2).any(1)是按行判断是否存在差异,要改成列级检查只需要调整聚合维度就行。
核心思路
要获取每个列是否完全相等的单个True/False结果,步骤很清晰:
- 先用
df1 == df2生成一个布尔DataFrame,每个元素对应原DataFrame相同位置的值是否相等; - 对这个布尔DataFrame按列聚合,判断该列所有元素是否全为True(即该列完全相等)。
具体实现代码
结合你的示例,直接看代码:
import numpy as np import pandas as pd df1 = pd.DataFrame(np.random.randint(low=0, high=10, size=(5, 5)), columns=['a', 'b', 'c', 'd', 'e']) df2 = df1.copy() df2.at[3,'d'] += 10 # 获取每个列是否完全相等的结果 column_equal = (df1 == df2).all() # 按你期望的格式输出 for col, is_equal in column_equal.items(): print(f"{col.upper()} {is_equal}")
运行后会输出你想要的结果:
A True B True C True D False E True
额外小技巧
.all()默认按列(axis=0)聚合,不用额外指定参数;- 如果你想直接找出有差异的列,可以用:
输出结果:diff_columns = column_equal[column_equal == False].index # 等价写法:diff_columns = (df1 != df2).any()[lambda x: x].index print("存在差异的列:", diff_columns.tolist())存在差异的列: ['d']
内容的提问来源于stack exchange,提问作者cardamom
相关产品推荐
相关产品推荐

