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

根据第一列的值计算多列的平均值

  •  0
  • EvitaSchaap  · 技术社区  · 3 年前

    给出以下列

    名称 记分1 记分2 记分3
    上下快速移动 100 120 900
    Lisa 40 120 90
    上下快速移动 590 490 80
    蒂姆 100 120 900
    蒂姆 40 120 90
    上下快速移动 590 490 80

    我想为Name列中的每个人计算所有列的平均值。 所以对于Bob,我想得到所有9个值的平均值。

    我知道下面的代码将计算多个列的平均值。如何使其计算具有相同名称的所有行的平均值?

    df['averages'] = df[['Score1', 'Score2', 'Score3']].mean(axis=1)
    
    2 回复  |  直到 3 年前
        1
  •  2
  •   mozway    3 年前

    你可以使用 groupby.apply numpy.mean :

    df.set_index('Name').groupby(level=0).apply(lambda g: np.mean(g.to_numpy()))
    

    stack :

    df.set_index('Name').stack().groupby(level=0).mean()
    

    或者计算总和并除以单元格数量:

    g = df.groupby('Name')
    
    out = g.sum().sum(axis=1).div(g['Name'].size()*(df.shape[1]-1))
    

    输出:

    Name
    Bob     382.222222
    Lisa     83.333333
    Tim     228.333333
    dtype: float64
    
        2
  •  1
  •   PaulS    3 年前

    另一种可能的解决方案:

    df.pivot_table(index='Name', aggfunc='mean').mean(axis=1)
    

    输出:

    Name
    Bob     382.222222
    Lisa     83.333333
    Tim     228.333333
    dtype: float64