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

DataFrame错误率分箱生成准确率分布列的代码问题排查

问题排查:准确率分布列计算不符合预期的原因及解决方案

先明确你的核心需求:基于Error_Rate推导对应的准确率区间列,其中准确率 = 100% - Error_Rate,对应区间规则如下:

  • Above 90% 准确率 → Error_Rate ≤10
  • 80% - 90% 准确率 → 10 < Error_Rate ≤20
  • 65% - 80% 准确率 →20 < Error_Rate ≤35
  • Below 65% 准确率 →Error_Rate >35

你的代码逻辑本身是自洽的,但大概率是以下问题导致结果不符合预期:


1. 数据类型错误(最可能的诱因)

如果你的Error_Rate列是字符串类型而非数值类型,数值比较会按照字符串字典序执行,完全打乱判断逻辑。比如字符串'3'和'10'比较时,'3' > '10'会返回True(因为首字符'3'的ASCII码大于'1'),这会让本应属于Above 90%的Error_Rate=10(字符串'10')被错误归类。

验证与修复步骤:

先检查列类型:

print(df['Error_Rate'].dtype)

如果输出是object(字符串类型),先转换为数值类型:

df['Error_Rate'] = pd.to_numeric(df['Error_Rate'], errors='coerce')

2. 嵌套np.where的可读性缺陷(潜在逻辑漏洞)

嵌套np.where虽然逻辑正确,但一旦符号写错(比如把>写成<),很难快速定位问题。更推荐用向量化条件赋值或pd.cut + 独热编码的方式,代码更简洁且不易出错。

优化后的代码

方式一:多条件直接赋值(可读性最高)

import pandas as pd
import numpy as np

# 初始化所有新增列为0
df[['Above 90%', '80% - 90%', '65% - 80%', 'Below 65%']] = 0

# 按区间逐个赋值
df.loc[df['Error_Rate'] <= 10, 'Above 90%'] = 1
df.loc[(df['Error_Rate'] > 10) & (df['Error_Rate'] <= 20), '80% - 90%'] = 1
df.loc[(df['Error_Rate'] > 20) & (df['Error_Rate'] <= 35), '65% - 80%'] = 1
df.loc[df['Error_Rate'] > 35, 'Below 65%'] = 1

方式二:pd.cut生成分类后转独热编码(最简洁)

# 定义错误率区间边界和对应准确率标签
bins = [-np.inf, 10, 20, 35, np.inf]
labels = ['Above 90%', '80% - 90%', '65% - 80%', 'Below 65%']

# 生成准确率分类列
df['Accuracy_Category'] = pd.cut(df['Error_Rate'], bins=bins, labels=labels, right=True)

# 转换为独热编码并合并到原表
df = pd.concat([df, pd.get_dummies(df['Accuracy_Category'], prefix='', prefix_sep='')], axis=1)
# 可选:删除临时分类列
df.drop('Accuracy_Category', axis=1, inplace=True)

3. 验证结果

用你的示例数据运行优化后的代码,会得到完全符合预期的结果:

Company  Error_Rate  Above 90%  80% - 90%  65% - 80%  Below 65%
0       A           9          1          0          0          0
1       B          10          1          0          0          0
2       c          20          0          1          0          0
3      GK          17          0          1          0          0
4      GK          18          0          1          0          0
5      GK          30          0          0          1          0
6      GK          35          0          0          1          0
7      GK          25          0          0          1          0
8      GK          32          0          0          1          0
9      GK          40          0          0          0          1
10     GK          50          0          0          0          1
11     MB          60          0          0          0          1
12     MB          70          0          0          0          1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:54:04