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

如何按列比较两个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}行")

代码说明

  1. 数据验证:用assert语句确保两个DataFrame的行列数完全一致,避免因数据不一致导致计算错误
  2. 矢量化计算:abs(dk - dl) > 3生成布尔值DataFrame,标记对应行的差值是否大于3;.sum(axis=0)按列统计True的数量,即符合条件的行数
  3. 结果输出:遍历统计结果,将0起始的列索引转为直观的第n列格式输出

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 21:35:13