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

ruoxqz4g  于 2023-05-21  发布在  其他
关注(0)|答案(2)|浏览(186)

给出下面的列
| 姓名|评分1|评分2|评分3|
| --------------|--------------|--------------|--------------|
| 鲍勃|一百|一百二十|九百|
| 丽莎|四十|一百二十|九十|
| 鲍勃|五九零|四百九十|八十|
| 蒂姆|一百|一百二十|九百|
| 蒂姆|四十|一百二十|九十|
| 鲍勃|五九零|四百九十|八十|
我想为“姓名”列中的每个人计算所有列的平均值。所以对于Bob,我想得到所有9个值的一个平均值。
我知道下面的代码将计算多个列的平均值。如何让它计算所有同名行的平均值?

df['averages'] = df[['Score1', 'Score2', 'Score3']].mean(axis=1)
0lvr5msh

0lvr5msh1#

你可以使用groupby.applynumpy.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
olhwl3o2

olhwl3o22#

另一种可能的解决方案:

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

输出:

Name
Bob     382.222222
Lisa     83.333333
Tim     228.333333
dtype: float64

相关问题