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

如何筛选DataFrame中class与pred列不匹配的记录?

解决方案

一、直接筛选class与pred不匹配的记录

最直接的方式是利用布尔索引过滤出两列值不相等的行:

# 筛选不匹配的记录
mismatched_df = df[df['class'] != df['pred']]

如果习惯用query方法,也可以这样写:

mismatched_df = df.query('class != pred')

注意:如果class和pred的数据类型不一致(比如一个是字符串、一个是整数),需要先统一类型,例如执行df['class'] = df['class'].astype(int)后再进行比较。

二、优化预测列(pred)的生成逻辑

你原来的pred生成代码可以简化,避免冗余操作:

方案1:简化中间列生成

利用filter(like=xxx)直接筛选对应类别的概率列,再计算最大值:

import pandas as pd

# 分别计算每个类别在所有模型中的最大概率
df['Covid_max'] = df.filter(like='Covid').max(axis=1)
df['Normal_max'] = df.filter(like='Normal').max(axis=1)
df['Pneumonia_max'] = df.filter(like='Pneumonia').max(axis=1)

# 生成pred并映射标签
label_map = {'Covid_max': 0, 'Normal_max': 1, 'Pneumonia_max': 2}
df['pred'] = df[['Covid_max','Normal_max','Pneumonia_max']].idxmax(axis=1).map(label_map)

方案2:无需生成中间列(更高效)

直接按类别分组计算最大概率,一步生成pred:

import pandas as pd

# 按类别分组计算每个样本的最大概率
category_probs = pd.DataFrame({
    'Covid': df.filter(like='Covid').max(axis=1),
    'Normal': df.filter(like='Normal').max(axis=1),
    'Pneumonia': df.filter(like='Pneumonia').max(axis=1)
})

# 生成pred并映射标签
df['pred'] = category_probs.idxmax(axis=1).map({'Covid': 0, 'Normal': 1, 'Pneumonia': 2})

这种方式省去了中间的Covid_max等列,代码更紧凑,内存占用也更低。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 01:45:31