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

Pandas是否有类似Excel排除式SUMIF的功能?用于混淆矩阵准确率计算

Pandas实现混淆矩阵的分类正确占比(替代Excel SUMIF排除式求和)

你要实现的是混淆矩阵中每列的正确分类占比,对应Excel公式的逻辑是**(列总和 - 列中行标签与列名不匹配的数值之和) / 列总和**,本质就是取列中「行索引=列名」的正确分类数,除以该列的总样本数。在Pandas里可以更直接地实现,具体步骤如下:

1. 准备数据(读取或构造混淆矩阵)

假设你的Excel数据读取后,行索引是分类名称(如Fantasy、Horror、RPG),列也是对应的分类。可以这样构造或处理数据:

import pandas as pd

# 方法1:构造示例混淆矩阵(模拟Excel中的表格)
data = {
    'Fantasy': [25, 1, 11],
    'Horror': [3, 13, 1],
    'RPG': [1, 0, 7]
}
my_data = pd.DataFrame(data, index=['Fantasy', 'Horror', 'RPG'])

# 方法2:从Excel读取并设置行索引(如果你的Excel第一列是分类名称)
# my_data = pd.read_excel("c:/mydata.xlsx", index_col=0)

2. 计算正确分类占比

方法1:利用numpy提取对角线(最简洁)

混淆矩阵的对角线元素就是各分类的正确预测数,直接提取后除以列总和即可:

import numpy as np

# 提取对角线元素(正确分类数)
correct_counts = np.diag(my_data)
# 计算每列的总样本数
column_totals = my_data.sum(axis=0)
# 计算占比并保留两位小数
accuracy = (correct_counts / column_totals).round(2)

执行结果:

Fantasy    0.68
Horror     0.76
RPG        0.88
dtype: float64

方法2:纯Pandas实现(无需numpy)

通过遍历列名,取对应行索引的数值:

# 提取每列中「行索引=列名」的正确分类数
correct_counts = my_data.apply(lambda col: col[col.name], axis=0)
# 计算列总和
column_totals = my_data.sum(axis=0)
# 计算占比
accuracy = (correct_counts / column_totals).round(2)

补充说明

你提到的groupby确实不适合这个场景,因为混淆矩阵本身已经是分类的交叉统计结果,直接针对对角线和列总和计算即可,比Excel的SUMIF排除式求和更高效直观。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 00:07:13