python 按条件分组的混淆矩阵

python confusion matrix by group with condition

我有 pandas 个数据框

work_id: user_id : actual : predicted
1      : 40      : True   : False
2      : 40      : True   : True
3      : 40      : True   : True
4      : 41      : True   : False
5      : 41      : False  : True
6      : 41      : False  : True

我想根据实际 == True 的条件计算混淆矩阵,结果应该是这样的

user_id : accuracy : accuracy_perct
40      : 2        : 0.67
41      : 0        : 0.00

你可以使用 groupby

import numpy as np
import pandas as pd


df = pd.DataFrame(
    data=[[1, 40, True, False, 0],
          [2, 40, True, True, 0],
          [3, 40, True, True, 0],
          [4, 41, True, False, 0],
          [5, 41, False, True, 0],
          [6, 41, False, True, 0]],
    columns=['work_id', 'user_id', 'actual', 'predicted', 'accurate']
)

df['accurate'] = np.where(df.actual == df.predicted, 1, 0)
df.groupby('user_id')['accurate'].agg(
    accuracy=('accurate', 'sum'),
    accuracy_perct=(lambda x: sum(x) / len(x)),
).reset_index()

Returns

user_id accuracy    accuracy_perct
40  2   0.666667
41  0   0.000000