Groupby召回熊猫

时间:2020-03-19 12:09:45

标签: pandas pandas-groupby

我有一个如下所示的数据框。

Category     Actual       Predicted
1            1            1
1            0            1
1            0            0
1            0            0
2            1            1
2            1            0
2            0            0
2            0            1
3            1            1
3            0            1
3            0            0
3            0            1

根据以上内容,我想计算出每个类别1、2和3的召回率,如下所示。

预期输出:

Category    Recall_for     Recall
1           0              66.7
1           1              100
2           0              50
2           1              50
3           0              33.3
3           1              100

说明:

对于类别= 1,实际= 1,有1种情况为真(与“预测”匹配),因此召回率= 1/1 * 100 = 100

对于类别= 1,实际= 0,有3种情况,只有2种为真(与Predicted相匹配),因此召回= 2/3 * 100 = 66.7,依此类推。

1 个答案:

答案 0 :(得分:2)

将两个列都与Series.eq进行比较,通过DataFrame.assign设置新列,然后聚合meanTrue的处理方式与1相似)并且最后多个和必要时取整值:

s = df['Predicted'].eq(df['Actual'])
df = (df.assign(Recall=s)
        .groupby(['Category','Actual'])['Recall']
        .mean()
        .mul(100)
        .round(1)
        .reset_index()
        .rename(columns={'Actual':'Recall_for'}))
print (df)
   Category  Recall_for  Recall
0         1           0    66.7
1         1           1   100.0
2         2           0    50.0
3         2           1    50.0
4         3           0    33.3
5         3           1   100.0