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

如何检查Pandas DataFrame中所有浮点列是否近似相等

验证DataFrame中多列浮点值是否两两近似相等

问题描述

有一个包含12列的DataFrame,其中多列为浮点型,需要验证指定列的每行值是否两两近似相等(阈值设为0.062)。只要任意一对列的值不满足近似相等,该行的验证结果即为False(例如示例中id为xyz的行)。

示例数据

import pandas as pd

df = pd.DataFrame({
    'id' : ['abc', 'pqr', 'xyz', 'cbz'],
    'col1' : [0.0234, 0.001852, 4.123, 0.0012],
    'col2' : [0.0235, 0.001851, 0.0123, 0.0013],
    'col3' : [0.0233, 0.001849, 0.124, 0.0011]
})

解决方案

方法一:基于基准列快速验证

利用np.isclose的广播特性,将每行所有列与第一列进行比较,若所有列都与基准列近似相等,则可认为两两近似相等(适用于绝对阈值场景,效率更高):

import numpy as np

# 指定需要验证的目标列(实际场景替换为12列的列名)
target_cols = ['col1', 'col2', 'col3']
# 设置近似阈值
tolerance = 0.062

# 新增列存储验证结果
df['all_close'] = df[target_cols].apply(
    lambda row: np.all(np.isclose(row, row.iloc[0], atol=tolerance)),
    axis=1
)

# 查看结果
print(df)

输出结果:

id      col1      col2      col3  all_close
0  abc  0.023400  0.023500  0.023300       True
1  pqr  0.001852  0.001851  0.001849       True
2  xyz  4.123000  0.012300  0.124000      False
3  cbz  0.001200  0.001300  0.001100       True

方法二:严格验证所有两两列对

如果需要确保每一对列都满足近似相等(避免极端情况下的传递性误差),可以遍历所有列的两两组合进行检查:

from itertools import combinations

def check_pairs(row, tol):
    # 生成所有列的两两组合
    for col_a, col_b in combinations(row.index, 2):
        if not np.isclose(row[col_a], row[col_b], atol=tol):
            return False
    return True

df['all_close'] = df[target_cols].apply(check_pairs, tol=tolerance, axis=1)

说明

  • atol参数用于设置绝对误差阈值,若需要相对误差可搭配rtol参数使用(np.isclose默认rtol=1e-05,atol=1e-08)
  • 当列数较多(如12列),方法一的效率远高于方法二(仅需比较n-1次,方法二需比较C(n,2)次)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 04:22:09