如何按列比较两个DataFrame?统计列内差值超3的行数
CSV文件逐列统计差值大于3的行数
需求说明
我有两个各包含200列的CSV文件,二者的行列数量完全一致。需要逐列进行比较:将文件a的第n列与文件b的第n列逐行对比,统计每列中数值差值大于3的行数,并对所有列重复此操作。
现有代码
import pandas as pd dk = pd.read_csv('C:/Users/D/1_top_a.csv', sep=',', header=None) dk = dk.dropna(how='all') dk = dk.dropna(how='all', axis=1) print(dk) dl = pd.read_csv('C:/Users/D/1_top_b.csv', sep=',', header=None) dl = dl.dropna(how='all') dl = dl.dropna(how='all', axis=1) print(dl) rows=dk.shape[0] print(rows) for i print(dk._get_value(0,0))
解决方案
不需要用双层循环,Pandas的矢量化操作能更高效地完成这个任务,步骤如下:
- 保留原有的数据读取与清理逻辑,确保数据无全空行/列
- 验证处理后的两个DataFrame行列数一致,避免后续计算报错
- 利用矢量化计算,直接对比每列对应行的差值绝对值是否大于3,再统计符合条件的行数
完整代码
import pandas as pd # 读取并清理数据 dk = pd.read_csv('C:/Users/D/1_top_a.csv', sep=',', header=None) dk = dk.dropna(how='all').dropna(how='all', axis=1) dl = pd.read_csv('C:/Users/D/1_top_b.csv', sep=',', header=None) dl = dl.dropna(how='all').dropna(how='all', axis=1) # 验证两个数据集的行列数一致 assert dk.shape == dl.shape, "处理后的两个文件行列数不匹配,请检查数据" # 计算每列中差值绝对值大于3的行数 diff_over_3_counts = (abs(dk - dl) > 3).sum(axis=0) # 输出统计结果 print("各列差值大于3的行数统计:") for column_num, count in diff_over_3_counts.items(): # 列索引从0开始,转成直观的第n列格式 print(f"第{column_num + 1}列:{count}行")
代码说明
- 数据验证:用
assert语句确保两个DataFrame的行列数完全一致,避免因数据不一致导致计算错误 - 矢量化计算:
abs(dk - dl) > 3生成布尔值DataFrame,标记对应行的差值是否大于3;.sum(axis=0)按列统计True的数量,即符合条件的行数 - 结果输出:遍历统计结果,将0起始的列索引转为直观的第n列格式输出
内容的提问来源于stack exchange,提问作者helloitsmontie
相关产品推荐
相关产品推荐

