首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >(意为/stdev所有列为一列)

(意为/stdev所有列为一列)
EN

Stack Overflow用户
提问于 2022-05-30 11:15:13
回答 1查看 42关注 0票数 2

这是用错误的答案结束的,请提供答案

代码语言:javascript
运行
复制
group_ = pd.DataFrame({'Name' : ['X','Y', 'X', 'X', 'Y','Y'],
     'a' : [3,6,4,7,9,3],
     'b' : [6,4,8,7,6,5],
     'h' : [34,43,63,34,54,56]})

  Name  a  b   h
0    X  3  6  34
1    Y  6  4  43
2    X  4  8  63
3    X  7  7  34
4    Y  9  6  54
5    Y  3  5  56

我希望获得所有列的X和Y的平均值和std值(而不是在agg中列出它们,或者任何地方都必须是动态的)。

我本可以这么做的:

代码语言:javascript
运行
复制
group_.groupby('Name').mean().mean(axis=1)

Name
X    18.444444
Y    20.666667
dtype: float64

np.mean([3,6,34,4,8,63,7,7,34]) = 18.444444

但是对于std不起作用,因为它给出了std的3列std。

代码语言:javascript
运行
复制
group_.groupby('Name').std().std(axis=1)

Name
X    8.793713
Y    3.055050
dtype: float64

不对!X_std = np.std([3,6,34,4,8,63,7,7,34]) = 19.556818141059377

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-30 11:31:40

对于std每个组的所有列,首先使用DataFrame.melt,然后使用GroupBy.std with ddof=0 (默认熊猫ddof=1):

代码语言:javascript
运行
复制
a = group_.melt('Name').groupby('Name')['value'].std(ddof=0)

print (a)
Name
X    19.556818
Y    21.756225
Name: value, dtype: float64

X_std = np.std([3,6,34,4,8,63,7,7,34])
print (X_std)
19.556818141059377

对于这两种汇总功能:

代码语言:javascript
运行
复制
df = group_.melt('Name').groupby('Name').agg(std=('value', lambda x: x.std(ddof=0)),
                                             mean=('value','mean'))

print (df)
            std       mean
Name                      
X     19.556818  18.444444
Y     21.756225  20.666667
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72433422

复制
相关文章

相似问题

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