另一个更新:已解决(请参阅评论和我自己的答案).
更新:这是我想解释的.
>>> 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)