相关疑难解决方法(0)

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

另一个更新:已解决(请参阅评论和我自己的答案).

更新:这是我想解释的.

>>> pd.Series([7,20,22,22]).std()
7.2284161474004804
>>> np.std([7,20,22,22])
6.2599920127744575
Run Code Online (Sandbox Code Playgroud)

答案:贝塞尔的校正解释了这一点,N-1而不是N标准差公式的分母.我希望熊猫使用与numpy相同的约定.


有一个相关的讨论在这里,但他们的建议都不能工作.

我有很多不同餐厅的数据.这是我的数据框(想象不止一个餐厅,但效果只用一个复制):

>>> df
restaurant_id  price
id                      
1           10407      7
3           10407     20
6           10407     22
13          10407     22
Run Code Online (Sandbox Code Playgroud)

问题: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
Run Code Online (Sandbox Code Playgroud)

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

>>> np.mean(df)
restaurant_id    10407.00
price               17.75
dtype: float64
>>> np.std(df)
restaurant_id    0.000000
price            6.259992
dtype: float64
Run Code Online (Sandbox Code Playgroud)

(当然,无视平均餐厅的身份.)显然,np.std(df)当我有一家以上的餐厅时,这不是一个解决方案.所以我正在使用groupby.

>>> df.groupby('restaurant_id').agg('std')
                  price
restaurant_id          
10407          7.228416
Run Code Online (Sandbox Code Playgroud)

什么?!7.228416不是6.259992.

让我们再试一次.

>>> …
Run Code Online (Sandbox Code Playgroud)

python statistics group-by numpy pandas

10
推荐指数
1
解决办法
8168
查看次数

标签 统计

group-by ×1

numpy ×1

pandas ×1

python ×1

statistics ×1