2017-07-04 272 views
0

有如下数据框,我想计算close列:volatility,例如window = 2,即两行的波动率。我python:pd.rolling_std函数结果不同于标准偏差计算器

Date  close 
2010-06-09 3160.0 
2010-06-10 3180.0 
2010-06-11 3215.0 
2010-06-14 3255.0 

我用下面的代码,其使用功能:

stdDeviation = pd.rolling_std(df['Close'],window=2) 
stdDeviation.head(4) 

结果是:

 Date 
2010-06-09   NaN 
2010-06-10 14.142136 
2010-06-11 24.748737 
2010-06-14 28.284271 
Name: Close, dtype: float64 

但是当由计算器计算的标准偏差https://en.wikipedia.org/wiki/Standard_deviation

我发现前两个数字:3160,3180,这些tw的标准偏差o number是10,与14.142136不同,后者是由function.pd.rolling_std计算出来的。

能否告诉我更多关于rolling_std函数的知识,详细介绍这个函数的函数。为什么不同,在我的问题中是否有问题。谢谢!

回答

2

熊猫默认情况下计算样本标准偏差。样本标准偏差的分母有一个校正因子,因此我们将平方和除以n-1而不是n。 1这里是由于样本平均值而失去的自由度。如果你想得到相同的结果,你可以将ddof=0传递给rolling_std,这会给你10个结果。

stdDeviation = pd.rolling_std(df['Close'], window=2, ddof=0) 
+0

嗨,感谢您的意见。我想计算股票收盘价的收盘价波动率。我的意思是哪一个是正确的:sample std or std? – tktktk0711

+0

您正在计算回报样本,所以我认为您应该使用样本标准差。我看了几页似乎同意:http://www.macroption.com/historical-volatility-calculation/ – ayhan

+0

感谢您的意见,这对我很有帮助。 – tktktk0711