如何使用Pandas计算数据框每行的真阳性率(TPR)
解决方案
可以用Pandas的矢量化操作快速实现这个需求,核心思路是逐行统计预测结果与标签匹配的数量,再除以预测列的总数,得到每行的真阳性率。
完整代码示例
import pandas as pd # 构造示例数据框 df = pd.DataFrame({ 'label': ['Apple', 'Orange'], 'pred1': ['Apple', 'Orange'], 'pred2': ['Orange', 'Orange'], 'pred3': ['Apple', 'Orange'] }) # 1. 筛选所有预测列(排除label列) pred_cols = df.columns.drop('label') # 2. 逐行计算匹配数量 / 预测列总数,保留两位小数 df['Score'] = (df[pred_cols].eq(df['label'], axis=0).sum(axis=1) / len(pred_cols)).round(2) print(df[['Score']])
代码解释
df[pred_cols].eq(df['label'], axis=0):将每行的所有预测列值与该行的label值做相等比较,返回布尔值组成的DataFrame.sum(axis=1):对每行的布尔值求和(True记为1,False记为0),得到该行的真阳性(TP)数量/ len(pred_cols):除以预测列的总数(即TP+FN的总数,因为所有预测都是针对当前标签类别的判断).round(2):将结果保留两位小数,与期望的输出格式一致
运行后输出:
Score 0 0.67 1 1.00
(注:0.66是2/3的近似值,实际计算为0.666...,round(2)会得到0.67;若需严格显示为0.66,可改用df['Score'] = df['Score'].apply(lambda x: "{:.2f}".format(x))做格式化)
内容的提问来源于stack exchange,提问作者mre
相关产品推荐
相关产品推荐

