You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按行列对比DataFrame?统计多列差值超3的行数

解决CSV逐列统计差值大于3的次数问题

完整实现代码

import pandas as pd

# 读取两个CSV文件,保留原有行列结构(题目说明二者行列完全一致)
dk = pd.read_csv('C:/Users/D/1_top_a.csv', sep=',', header=None)
dl = pd.read_csv('C:/Users/D/1_top_b.csv', sep=',', header=None)

# 移除全为空的行和列(若确认数据无全空行列可省略)
dk = dk.dropna(how='all').dropna(how='all', axis=1)
dl = dl.dropna(how='all').dropna(how='all', axis=1)

# 校验处理后两个文件的行列数一致,避免计算出错
assert dk.shape == dl.shape, "两个文件处理后行列数不匹配,请检查数据"

# 计算对应元素差值的绝对值,统计每列中差值大于3的次数
diff_counts = (abs(dk - dl) > 3).sum(axis=0)

# 输出结果:索引为列序号,值为对应列差值大于3的行数
print(diff_counts)

代码说明

  • 数据读取:直接读取两个CSV文件,契合题目中"二者行列数量完全一致"的前提。
  • 空值清理:保留你原代码中的dropna操作,用于过滤全空的行或列。
  • 一致性校验:用assert确保处理后的两个DataFrame结构完全匹配,防止因数据异常导致计算错误。
  • 高效计算:利用Pandas矢量化特性,直接对整个数据集做差值判断并按列求和,比逐行循环效率高得多,尤其适合200列的大数据量场景。
  • 结果解读:diff_counts是一个Series对象,索引为列的序号(从0开始),对应的值就是该列中差值大于3的行的数量。

逐列循环实现方案(不推荐,效率较低)

如果一定要补全你原代码中的for循环逻辑,可参考以下写法:

rows = dk.shape[0]
cols = dk.shape[1]
diff_counts = []

for i in range(cols):
    # 取出第i列的所有数据
    col_a = dk.iloc[:, i]
    col_b = dl.iloc[:, i]
    # 统计当前列差值大于3的次数
    count = sum(abs(col_a - col_b) > 3)
    diff_counts.append(count)

# 转换为Series方便查看列号对应关系
diff_counts = pd.Series(diff_counts, index=range(cols))
print(diff_counts)

内容的提问来源于stack exchange,提问作者hannabellamontaha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 20:25:22