首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分组Pandas DataFrame并计算一列的平均值和标准差,并使用reset_index将标准列添加为新列

分组Pandas DataFrame并计算一列的平均值和标准差,并使用reset_index将标准列添加为新列
EN

Stack Overflow用户
提问于 2014-10-28 09:08:30
回答 1查看 39.8K关注 0票数 29

我有一个熊猫DataFrame,如下所示:

代码语言:javascript
复制
   a      b      c      d
0  Apple  3      5      7
1  Banana 4      4      8
2  Cherry 7      1      3
3  Apple  3      4      7

我想按列'a‘对行进行分组,同时将列'c’中的值替换为分组行中的值的平均值,并添加另一列,该列与列'c‘中的值的标准偏差已计算出平均值。列'b‘或'd’中的值对于分组的所有行都是常量。因此,期望的输出将是:

代码语言:javascript
复制
   a      b      c      d      e
0  Apple  3      4.5    7      0.707107
1  Banana 4      4      8      0
2  Cherry 7      1      3      0

实现这一目标的最佳方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-28 09:25:43

您可以使用groupby-agg operation

代码语言:javascript
复制
In [38]: result = df.groupby(['a'], as_index=False).agg(
                      {'c':['mean','std'],'b':'first', 'd':'first'})

然后对列进行重命名和重新排序:

代码语言:javascript
复制
In [39]: result.columns = ['a','c','e','b','d']

In [40]: result.reindex(columns=sorted(result.columns))
Out[40]: 
        a  b    c  d         e
0   Apple  3  4.5  7  0.707107
1  Banana  4  4.0  8       NaN
2  Cherry  7  1.0  3       NaN

默认情况下,Pandas计算样本std。要计算总体标准,请执行以下操作:

代码语言:javascript
复制
def pop_std(x):
    return x.std(ddof=0)

result = df.groupby(['a'], as_index=False).agg({'c':['mean',pop_std],'b':'first', 'd':'first'})

result.columns = ['a','c','e','b','d']
result.reindex(columns=sorted(result.columns))

收益率

代码语言:javascript
复制
        a  b    c  d    e
0   Apple  3  4.5  7  0.5
1  Banana  4  4.0  8  0.0
2  Cherry  7  1.0  3  0.0
票数 55
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26599347

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档