【问题标题】:Pandas Group By + Cumsum on Categorical VariablePandas Group By + Cumsum 分类变量
【发布时间】:2018-06-10 17:13:52
【问题描述】:

我对用户进行的足球比赛进行了投注。他们的状态是正确的还是不正确的。每周(表中的“jornada”)每个用户有 10 场比赛。此外,用户被分组到社区中。

我想计算每个用户每周 ('jornada') 的累积比率 #Corrects / (#Corrects + #Incorrects)

这是数据集的样子:

每个用户每周都会有 10 次新的猜测(“数字”),这些猜测必须与他在同一季节的先前猜测相加(“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)

【问题讨论】:

    标签: pandas group-by pandas-groupby cumsum


    【解决方案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
    

    【讨论】:

    • 谢谢文!这样我就可以得到每行的比率,但这不是问题,因为我可以再次 bets2 = bets.groupby(['temporada', 'username', 'comunidad', 'jornada'])['New'].mean ()。问题是其他 4 列显示为新数据框的索引,而不是新列。你知道为什么吗?
    • @PabloRuizRuiz 在末尾添加 reset_index()
    • 太棒了。非常感谢:)
    猜你喜欢
    • 2018-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-23
    • 2018-03-05
    • 1970-01-01
    • 2023-01-15
    • 2020-12-17
    相关资源
    最近更新 更多