如何对比dataframe中取值相反的两列并完成校验及可视化?
两列相反校验与可视化方案
校验方法
直接通过pandas逐行对比即可,支持布尔、字符串T/F、正负数值等多种相反场景:
import pandas as pd # 构造样例数据 df = pd.DataFrame({ 'Col1': ['T', 'F', 'T', 'T'], 'Col2': ['F', 'T', 'F', 'F'] }) # 场景1:取值为字符串T/F/布尔值,判断两列不等即为相反 df['is_reverse'] = df['Col1'] != df['Col2'] # 场景2:取值为数值,判断为正负相反,可修改为 df['is_reverse'] = df['Col1'] == -df['Col2'] # 全局校验两列是否完全相反 all_reverse = df['is_reverse'].all() print(f"两列是否完全相反:{all_reverse}") # 筛选出不满足相反规则的异常行 abnormal_rows = df[~df['is_reverse']] print("异常行数据:\n", abnormal_rows)
可视化方法
用混淆矩阵热力图可以直观展示两列的取值匹配情况,完全相反的情况下只有两种交叉取值有计数:
import seaborn as sns import matplotlib.pyplot as plt # 生成两列取值的交叉计数表 cross_tab = pd.crosstab(df['Col1'], df['Col2']) # 绘制热力图 plt.figure(figsize=(6, 4)) sns.heatmap(cross_tab, annot=True, fmt='d', cmap='Blues') plt.title('Col1与Col2取值分布对比') plt.xlabel('Col2') plt.ylabel('Col1') plt.show()
运行后如果热力图中仅Col1=T & Col2=F、Col1=F & Col2=T两个单元格有数值,其余单元格为0,即可确认两列完全相反。
内容的提问来源于stack exchange,提问作者user16971617
相关产品推荐
相关产品推荐

