Pandas 分组依据 + 分类变量的 Cumsum
Pandas Group By + Cumsum on Categorical Variable
我对用户进行的足球比赛进行了投注。他们的状态是正确的还是不正确的。每个星期(table 中的 'jornada')每个用户有 10 场比赛。此外,用户被分组到社区中。
我想计算每个用户每周 ('jornada') 的累积比率 #Corrects / (#Corrects + #Incorrects)
。
这是数据集的样子:
每周,每个用户将有 10 次新的猜测 ('number'),这些猜测必须累积到他之前对同一季节的猜测 ('temporada')。
这是我试过的:
bets.groupby(['temporada', 'username', 'comunidad', 'jornada'])['status'].cumsum()
但正在引发错误:DataError: No numeric types to aggregate
我也在尝试使用 get_dummies 隐藏状态,然后在组上应用 cum_sum,但对于同一用户在同一周内出现的 10 次,我应该得到相同的比率但它没有发生:
dum = pd.get_dummies(bets['status'])
bets2 = pd.concat([bets, dum], axis=1)
corrects = bets2.groupby(['temporada', 'username', 'comunidad', 'jornada'])['Correct'].cumsum()
incorrects = bets2.groupby(['temporada', 'username', 'comunidad', 'jornada'])['Incorrect'].cumsum()
ratio = corrects / (corrects + incorrects)
bets3 = pd.concat([bets2, ratio], axis=1)
您可以创建一个新的 para 帮助来计算
s1=bets.assign(correct=bets['status']=='Corrects').groupby(['temporada', 'username', 'comunidad', 'jornada']).correct.cumsum()
s2=bets.assign(correct=bets['status']=='Incorrects').groupby(['temporada', 'username', 'comunidad', 'jornada']).correct.cumsum()
bets['New']=(s1/(s1+s2)).values
我对用户进行的足球比赛进行了投注。他们的状态是正确的还是不正确的。每个星期(table 中的 'jornada')每个用户有 10 场比赛。此外,用户被分组到社区中。
我想计算每个用户每周 ('jornada') 的累积比率 #Corrects / (#Corrects + #Incorrects)
。
这是数据集的样子:
每周,每个用户将有 10 次新的猜测 ('number'),这些猜测必须累积到他之前对同一季节的猜测 ('temporada')。
这是我试过的:
bets.groupby(['temporada', 'username', 'comunidad', 'jornada'])['status'].cumsum()
但正在引发错误:DataError: No numeric types to aggregate
我也在尝试使用 get_dummies 隐藏状态,然后在组上应用 cum_sum,但对于同一用户在同一周内出现的 10 次,我应该得到相同的比率但它没有发生:
dum = pd.get_dummies(bets['status'])
bets2 = pd.concat([bets, dum], axis=1)
corrects = bets2.groupby(['temporada', 'username', 'comunidad', 'jornada'])['Correct'].cumsum()
incorrects = bets2.groupby(['temporada', 'username', 'comunidad', 'jornada'])['Incorrect'].cumsum()
ratio = corrects / (corrects + incorrects)
bets3 = pd.concat([bets2, ratio], axis=1)
您可以创建一个新的 para 帮助来计算
s1=bets.assign(correct=bets['status']=='Corrects').groupby(['temporada', 'username', 'comunidad', 'jornada']).correct.cumsum()
s2=bets.assign(correct=bets['status']=='Incorrects').groupby(['temporada', 'username', 'comunidad', 'jornada']).correct.cumsum()
bets['New']=(s1/(s1+s2)).values