我正在尝试使用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语句?我使用的记录不是(不是上面的示例表)不是样本,所以我只对人口标准偏差感兴趣。
答案 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])