拥有一个pandas数据框如下:
a b
0 1 12
1 1 13
2 1 23
3 2 22
4 2 23
5 2 24
6 3 30
7 3 35
8 3 55
我想找到每组中b列的平均标准偏差。 我的以下代码为每组提供0。
stdMeann = lambda x: np.std(np.mean(x))
print(pd.Series(data.groupby('a').b.apply(stdMeann)))
答案 0 :(得分:9)
如评论中所述,您可以通过多个统计信息使用.agg
to aggregate:
In [11]: df.groupby("a")["b"].agg([np.mean, np.std])
Out[11]:
mean std
a
1 16 6.082763
2 23 1.000000
3 40 13.228757
pandas让你传递调度字符串,而不是使用numpy函数:
In [12]: df.groupby("a")["b"].agg(["mean", "std"]) # just b
Out[12]:
mean std
a
1 16 6.082763
2 23 1.000000
3 40 13.228757
In [13]: df.groupby("a").agg(["mean", "std"]) # all columns
Out[13]:
b
mean std
a
1 16 6.082763
2 23 1.000000
3 40 13.228757
您还可以指定按列进行的操作:
In [14]: df.groupby("a").agg({"b": ["mean", "std"]})
Out[14]:
b
mean std
a
1 16 6.082763
2 23 1.000000
3 40 13.228757
注意:你得到0的原因是单个数字的np.std
为0(对我而言,这并不奇怪,它不是错误,但我们确实如此):
In [21]: np.std(1)
Out[21]: 0.0