大熊猫数据框中的平均值

Elh*_*ham 6 python mean standard-deviation pandas

有一个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
Run Code Online (Sandbox Code Playgroud)

我想找到每组中b列的平均标准偏差.我的以下代码为每组提供0.

stdMeann = lambda x: np.std(np.mean(x))
print(pd.Series(data.groupby('a').b.apply(stdMeann)))
Run Code Online (Sandbox Code Playgroud)

And*_*den 10

如评论中所述,您可以使用多个统计信息.agg进行汇总:

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
Run Code Online (Sandbox Code Playgroud)

让你传递调度字符串,而不是使用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
Run Code Online (Sandbox Code Playgroud)

您还可以指定按列进行的操作:

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
Run Code Online (Sandbox Code Playgroud)

注意:你得到0的原因是np.std单个数字是0(这对我来说有点令人惊讶,它不是错误,但我们有):

In [21]: np.std(1)
Out[21]: 0.0
Run Code Online (Sandbox Code Playgroud)