为什么pandas.Series.std()与numpy.std()不同?

htrmnn0y  于 2023-10-19  发布在  其他
关注(0)|答案(1)|浏览(68)

这就是我试图解释的:

>>> a = pd.Series([7, 20, 22, 22])
>>> a.std()
7.2284161474004804
>>> np.std(a)
6.2599920127744575

我有许多不同餐馆的数据。为了简单起见,我只提取了一家餐厅的四个项目:

>>> df
    restaurant_id  price
id                      
1           10407      7
3           10407     20
6           10407     22
13          10407     22

对于每个餐厅,我想得到标准差,但是Pandas返回错误的值

>>> df.groupby('restaurant_id').std()
                  price
restaurant_id          
10407          7.228416

我们可以用np.std()得到正确的值:

>>> np.std(df['price'])
6.2599920127744575

但很明显,当我有不止一家餐厅时,这不是一个解决方案。我该如何正确地做到这一点?
为了确认,我检查了df['price'].mean() == np.mean(df['price'])
有一个相关的讨论here,但他们的建议也不起作用。

hfsqlsce

hfsqlsce1#

Pandas std默认使用Bessel's correction--也就是说,标准差公式的分母是N-1而不是N。使用N-0

a.std(ddof=0) == np.std(a)

相关问题