【问题标题】:Pandas - expanding mean with groupbyPandas - 使用 groupby 扩展均值
【发布时间】:2018-09-15 21:56:09
【问题描述】:

我正在尝试扩展均值。当我通过按特定值过滤来迭代和“分组”时,我可以让它工作,但这需要很长时间才能完成。我觉得这应该是一个使用 groupby 的简单应用程序,但是当我这样做时,它只是对整个数据集执行扩展均值,而不是仅对 grouby 中的每个组执行此操作。

举个简单的例子:

我想取这个(在这个特殊情况下,按“玩家”和“年份”分组),并得到一个扩展的平均值。

player  pos year    wk  pa  ra
a       qb  2001    1   10  0       
a       qb  2001    2   5   0
a       qb  2001    3   10  0
a       qb  2002    1   12  0
a       qb  2002    2   13  0
b       rb  2001    1   0   20
b       rb  2001    2   0   17
b       rb  2001    3   0   12
b       rb  2002    1   0   14
b       rb  2002    2   0   15

得到:

player  pos year    wk  pa  ra  avg_pa  avg_ra
a       qb  2001    1   10  0   10      0
a       qb  2001    2   5   0   7.5     0
a       qb  2001    3   10  0   8.3     0
a       qb  2002    1   12  0   12      0
a       qb  2002    2   13  0   12.5    0
b       rb  2001    1   0   20  0       20
b       rb  2001    2   0   17  0       18.5
b       rb  2001    3   0   12  0       16.3
b       rb  2002    1   0   14  0       14
b       rb  2002    2   0   15  0       14.5

不知道哪里出错了:

# Group by player and season - also put weeks in correct ascending order
grouped = calc_averages.groupby(['player','pos','seas']).apply(pd.DataFrame.sort_values, 'wk')


grouped['avg_pa'] = grouped['pa'].expanding().mean()

但这将扩大整个系列的平均值,而不是每个球员,每个赛季。

【问题讨论】:

    标签: pandas pandas-groupby


    【解决方案1】:

    试试:

    df.sort_values('wk').groupby(['player','pos','year'])['pa','ra'].expanding().mean()\
      .reset_index()
    

    输出:

      player pos  year  level_3         pa         ra
    0      a  qb  2001        0  10.000000   0.000000
    1      a  qb  2001        1   7.500000   0.000000
    2      a  qb  2001        2   8.333333   0.000000
    3      a  qb  2002        3  12.000000   0.000000
    4      a  qb  2002        4  12.500000   0.000000
    5      b  rb  2001        5   0.000000  20.000000
    6      b  rb  2001        6   0.000000  18.500000
    7      b  rb  2001        7   0.000000  16.333333
    8      b  rb  2002        8   0.000000  14.000000
    9      b  rb  2002        9   0.000000  14.500000
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-02
      • 2021-10-20
      • 1970-01-01
      • 2014-01-26
      • 2021-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多