代码之家  ›  专栏  ›  技术社区  ›  chitown88

熊猫-通过groupby扩展平均值

  •  0
  • chitown88  · 技术社区  · 6 年前

    我想得到一个扩大的平均数。我可以让它工作时,我迭代和“组”只是通过过滤的具体价值观,但它需要太长的时间来做。我觉得这应该是一个简单的groupby应用程序,但是当我这样做的时候,它只是对整个数据集进行扩展,而不是对groupby中的每个组进行扩展。

    举个简单的例子:

    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()
    

    1 回复  |  直到 6 年前
        1
  •  8
  •   Scott Boston    6 年前

    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