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

如何在Pandas中高效编码分类器性能并处理NaN值

高效生成混淆矩阵分类列的Pandas实现

核心思路

针对真实标签列c1(A=正例、B=负例)和预测结果列c2(a=正预测、b=负预测),我们可以通过向量化布尔运算或规则字典循环替代冗余的loc赋值,同时自动处理NaN值(NaN参与比较时结果为False,对应四类标签均为0)。


方法1:向量化布尔运算(性能最优)

直接利用Pandas的向量化特性,通过布尔条件组合生成目标列,比逐行处理效率高得多:

import pandas as pd
import numpy as np

# 示例数据
df = pd.DataFrame({
    'c1': ['A', 'B', 'A', 'B', np.nan, 'A'],
    'c2': ['a', 'b', 'b', 'a', 'a', np.nan]
})

# 生成混淆矩阵四类列(0/1格式,若需布尔值可去掉astype(int))
df['truepos'] = ((df['c1'] == 'A') & (df['c2'] == 'a')).astype(int)
df['trueneg'] = ((df['c1'] == 'B') & (df['c2'] == 'b')).astype(int)
df['falsepos'] = ((df['c1'] == 'B') & (df['c2'] == 'a')).astype(int)
df['falseneg'] = ((df['c1'] == 'A') & (df['c2'] == 'b')).astype(int)

方法2:规则字典循环(代码最简洁)

把四类判断规则存入字典,通过循环批量生成列,便于后续维护修改:

# 定义混淆矩阵规则字典
confusion_rules = {
    'truepos': (df['c1'] == 'A') & (df['c2'] == 'a'),
    'trueneg': (df['c1'] == 'B') & (df['c2'] == 'b'),
    'falsepos': (df['c1'] == 'B') & (df['c2'] == 'a'),
    'falseneg': (df['c1'] == 'A') & (df['c2'] == 'b')
}

# 循环生成所有目标列
for col_name, condition in confusion_rules.items():
    df[col_name] = condition.astype(int)

方法3:lambda+apply(适合复杂自定义逻辑)

如果后续需要扩展更复杂的判断逻辑,可使用apply结合lambda逐行处理(注意:性能略低于前两种向量化方法):

df['truepos'] = df.apply(lambda x: 1 if x['c1'] == 'A' and x['c2'] == 'a' else 0, axis=1)
df['trueneg'] = df.apply(lambda x: 1 if x['c1'] == 'B' and x['c2'] == 'b' else 0, axis=1)
df['falsepos'] = df.apply(lambda x: 1 if x['c1'] == 'B' and x['c2'] == 'a' else 0, axis=1)
df['falseneg'] = df.apply(lambda x: 1 if x['c1'] == 'A' and x['c2'] == 'b' else 0, axis=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 08:12:14