Pandas数据帧组用于计算人口标准差

nee*_*hiv 5 python statistics numpy pandas

我试图使用groupby和np.std来计算标准偏差,但它似乎是计算样本标准偏差(自由度等于1).

这是一个例子.

#create dataframe
>>> df = pd.DataFrame({'A':[1,1,2,2],'B':[1,2,1,2],'values':np.arange(10,30,5)})
>>> df
   A  B  values
0  1  1      10
1  1  2      15
2  2  1      20
3  2  2      25

#calculate standard deviation using groupby
>>> df.groupby('A').agg(np.std)
      B    values
A                    
1  0.707107  3.535534
2  0.707107  3.535534

#Calculate using numpy (np.std)
>>> np.std([10,15],ddof=0)
2.5
>>> np.std([10,15],ddof=1)
3.5355339059327378
Run Code Online (Sandbox Code Playgroud)

有没有办法使用群体标准计算(ddof = 0)和groupby语句?我使用的记录不是(不是上面的示例表)不是样本,所以我只对群体标准偏差感兴趣.

EdC*_*ica 14

您可以np.stdagg函数中传递其他参数:

In [202]:

df.groupby('A').agg(np.std, ddof=0)

Out[202]:
     B  values
A             
1  0.5     2.5
2  0.5     2.5

In [203]:

df.groupby('A').agg(np.std, ddof=1)

Out[203]:
          B    values
A                    
1  0.707107  3.535534
2  0.707107  3.535534
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!我试过“df.groupby('A').agg(np.std(ddof=0))”,但我没有尝试在agg括号中添加ddof。我会在 8 分钟内将您的回复标记为答案(您的回复非常快)。 (2认同)

Gio*_*ous 8

为了degree of freedom = 0

(这意味着只有一个数字的垃圾箱最终会出现std=0而不是NaN

import numpy as np


def std(x): 
    return np.std(x)


df.groupby('A').agg(['mean', 'max', std])
Run Code Online (Sandbox Code Playgroud)