Pandas 熊猫分组召回

Pandas 熊猫分组召回,pandas,pandas-groupby,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

我有一个如下所示的数据帧

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     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
预期产出:

Category    Recall_for     Recall
1           0              66.7
1           1              100
2           0              50
2           1              50
3           0              33.3
3           1              100
说明:

对于category=1,Actual=1,有1种情况是true(与预测匹配),所以recall=1/1*100=100

对于category=1,Actual=0,有3种情况,只有2种情况是真的(与预测相匹配),所以recall=2/3*100=66.7,依此类推。

比较两列,设置新列,然后聚合
平均值(
true
s处理方式与
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