Pandas,按唯一用户分组和分析结果

Pandas, grouping by unique user and profiling result

我有一个赌博交易的 df(下面的小样本)。我希望能够对每个唯一用户的交易进行分组,而且还可以确定每个用户的成功。

import pandas as pd
    
d = {'user_id': [1234, 5830, 3943, 1234, 5032, 5830,1234 ], 'win': [1, 0, 1, 0, 0, 1, 1],}
    
df= pd.DataFrame(data=d)
df

我可以将用户 ID 分组并计数以查看每次出现的次数,但不执行第二部分 - 确定每个用户的成功,希望看到 win/loss 的实际值和比率对于每个用户。

group =  df.groupby('user_id')['user_id'].count()
print(group)

所以我的输出将是一个包含这些列的 df 'User'、'Total_wins'、'Total_losses'、'win_loss_ratio'

GroupBy.agg 用于计数 1sum,对于计数 0 lambda 函数,对于 ratio 使用 mean:

df=(df.groupby('user_id',as_index=False).agg(Total_wins=('win','sum'),
                                             Total_losses=('win', lambda x: x.eq(0).sum()),
                                             win_loss_ratio=('win','mean')))
print (df)
   user_id  Total_wins  Total_losses  win_loss_ratio
0     1234           2             1        0.666667
1     3943           1             0        1.000000
2     5032           0             1        0.000000
3     5830           1             1        0.500000