【发布时间】:2017-04-06 03:47:44
【问题描述】:
还有其他人对 pandas 中的新 rolling.std() 有问题吗?不推荐使用的方法是rolling_std()。新方法运行良好,但会产生一个不随时间序列滚动的常数。
示例代码如下。如果您交易股票,您可能会认出布林带的公式。我从rolling.std() 得到的输出每天都在跟踪股票,显然不是滚动的。
这在熊猫 0.19.1 中。任何帮助,将不胜感激。
import datetime
import pandas as pd
import pandas_datareader.data as web
start = datetime.datetime(2012,1,1)
end = datetime.datetime(2012,12,31)
g = web.DataReader(['AAPL'], 'yahoo', start, end)
stocks = g['Close']
stocks['Date'] = pd.to_datetime(stocks.index)
stocks['AAPL_LO'] = stocks['AAPL'] - stocks['AAPL'].rolling(20).std() * 2
stocks['AAPL_HI'] = stocks['AAPL'] + stocks['AAPL'].rolling(20).std() * 2
stocks.dropna(axis=0, how='any', inplace=True)
【问题讨论】:
-
您可以添加您实际期望的输出吗?
-
stocks['AAPL'].rolling(20).std()给出与pd.rolling_std(stocks['AAPL'], window=20)完全相同的输出... -
我无法在此处重现:听起来您好像在说
stocks['AAPL'].rolling(20).std()是恒定的,但我看到了一个非恒定的随时间变化的结果。例如,在绘图时,我发现 2012 年 7 月左右的条带比 2012 年 4 月左右的条带要细得多。 -
感谢您显示 std() 工作正常。我原本预计 20 天的回溯会更顺畅,但似乎我也必须使用 mean()。
标签: python pandas standard-deviation