如何在pandas中同时计算均值和标准差?

5
例如,我们有这样的数据:
>>> df
   name  score  times
0   tom    100      1
1   tom     99      2
2   tom    100      3
3  jack     99      1
4  jack     99      2
5  tony    100      1
6  tony    100      2
7  tony    100      3

我希望获得像这样的结果

   name       score std
0  jack   99.000000  0
1   tom   99.666667  0.57
2  tony  100.000000  0

是否可以一次性得到结果? 现在我必须分别计算它们并组合结果。

3个回答

8
您可以使用agg函数来计算mean
df = df.groupby('name').agg({'score': ['mean', 'std']})

然后您将获得多级索引数据框,要提取级别,请执行以下操作。

df = df.xs('score', axis=1, drop_level=True)
    # 'score' : key on which to get cross section
    # axis=1 : get cross section of column
    # drop_level=True : returns cross section without the multilevel index

根据您给出的输出,请执行以下操作:

df = df.reset_index('name')

那么就将其重命名

df.rename(columns={"mean":"score"}, inplace=True)

输出:

   name       score      std
0  jack   99.000000  0.00000
1   tom   99.666667  0.57735
2  tony  100.000000  0.00000

很高兴能够帮助!如果我的回答有帮助,请不要忘记接受它。谢谢。 - ammy

5

使用 agg

In [274]: df.groupby('name').agg({'score': ['mean', 'std']})
Out[274]:
           score
            mean      std
name
jack   99.000000  0.00000
tom    99.666667  0.57735
tony  100.000000  0.00000

0

为了得到需要的结果,您可以首先按名称分组,计算得分的平均值和标准差,然后重命名和重新索引。

(
     df.groupby('name').score.agg(['mean','std'])
       .rename(columns={'mean':'score'}).reset_index()
)
Out[204]: 
   name       score      std
0  jack   99.000000  0.00000
1   tom   99.666667  0.57735
2  tony  100.000000  0.00000

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接