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

时间:2014-09-18 14:19:22

标签: python numpy pandas statistics

我正在尝试使用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

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

2 个答案:

答案 0 :(得分:10)

您可以在np.std函数中将其他参数传递给agg

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

答案 1 :(得分:2)

对于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])