gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 18:18:41 25 4
gpt4 key购买 nike

这就是我要解释的:

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

回答:这由Bessel's correction解释, N-1 而不是标准差公式的分母中的 N 。我希望 Pandas 使用与 numpy 相同的约定。


有相关讨论here , 但他们的建议也不起作用。

我有很多不同餐厅的数据。这是我的数据框(想象不止一家餐厅,但效果只用一家再现):

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

问题:r.mi.groupby('restaurant_id')['price'].mean() 返回每家餐厅的价格均值。我想得到标准偏差。但是,r.mi.groupby('restaurant_id')['price'].std() 返回错误值

如您所见,为简单起见,我只提取了一家餐厅和四件商品。我想找到价格的标准偏差。只是为了确保:

>>> np.mean([7,20,22,22])
17.75
>>> np.std([7,20,22,22])
6.2599920127744575

我们可以得到相同(正确)的值

>>> np.mean(df)
restaurant_id 10407.00
price 17.75
dtype: float64
>>> np.std(df)
restaurant_id 0.000000
price 6.259992
dtype: float64

(当然,请忽略平均餐厅 ID。)显然,当我有多个餐厅时,np.std(df) 不是解决方案。所以我正在使用 groupby

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

什么?! 7.228416 不是 6.259992。

我们再试一次。

>>> df.groupby('restaurant_id').std()

同样的事情。

>>> df.groupby('restaurant_id')['price'].std()

同样的事情。

>>> df.groupby('restaurant_id').apply(lambda x: x.std())

同样的事情。

但是,这是可行的:

for id, group in df.groupby('restaurant_id'):
print id, np.std(group['price'])

问题:是否有合适的方法来聚合数据框,这样我就能得到一个包含每家餐厅标准差的新时间序列?

最佳答案

我明白了。 Pandas 正在使用 Bessel's correction默认情况下——即标准差公式的分母为 N-1 而不是 N。正如 behzad.nouri 在评论中指出的那样,

pd.Series([7,20,22,22]).std(ddof=0)==np.std([7,20,22,22])

关于python - 为什么 pandas.Series.std() 与 numpy.std() 不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25695986/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com