假设我有一个时间序列:
In[138] rng = pd.date_range('1/10/2011', periods=10, freq='D')
In[139] ts = pd.Series(randn(len(rng)), index=rng)
In[140]
Out[140]:
2011-01-10 0
2011-01-11 1
2011-01-12 2
2011-01-13 3
2011-01-14 4
2011-01-15 5
2011-01-16 6
2011-01-17 7
2011-01-18 8
2011-01-19 9
Freq: D, dtype: int64
Run Code Online (Sandbox Code Playgroud)
如果我使用其中一个rolling_*函数,例如rolling_sum,我可以获得我想要的向后看滚动计算的行为:
In [157]: pd.rolling_sum(ts, window=3, min_periods=0)
Out[157]:
2011-01-10 0
2011-01-11 1
2011-01-12 3
2011-01-13 6
2011-01-14 9
2011-01-15 12
2011-01-16 15
2011-01-17 18
2011-01-18 21
2011-01-19 24
Freq: D, dtype: float64
Run Code Online (Sandbox Code Playgroud)
但是,如果我想做一个前瞻性的总和怎么办?我尝试过这样的事情:
In [161]: pd.rolling_sum(ts.shift(-2, freq='D'), window=3, min_periods=0)
Out[161]:
2011-01-08 0
2011-01-09 …Run Code Online (Sandbox Code Playgroud) 我有一个关于处理滚动标准偏差的问题:
数据框如下所示:
2010-01-20 05:00:00 -0.011
2010-01-20 05:02:00 -0.032
2010-01-20 05:02:00 -0.037
2010-01-20 05:04:00 0.001
2010-01-20 05:06:00 0.023
2010-01-20 05:06:00 0.011
2010-01-20 05:08:00 0.049
2010-01-20 05:10:00 0.102
....
2010-05-20 17:00:00 0.022
Run Code Online (Sandbox Code Playgroud)
这是从早上5点到下午5点的2分钟数据(索引'yyyy-mm-dd hh:mm:ss'的格式是日期戳)
我想计算标准偏差的8天回顾.我的直觉是将数据框分成每日数据集,然后计算滚动标准偏差,但我不知道如何处理这些索引,我想我的方法可能需要花费大量时间来计算.非常感谢你的帮助!
最后,我希望结果如下:
2010-01-20 0.0
2010-01-21 0.0
2010-01-22 0.0
....
2010-01-26 0.0
2010-01-27 0.12
2010-01-28 0.02
2010-01-29 0.07
...
2010-05-20 0.10
Run Code Online (Sandbox Code Playgroud)
谢谢您的帮助.@unutbu
刚发现数据中的问题:数据框并不完全包含整个2分钟的数据.例如:
2010-01-21 15:08:00 0.044
2010-01-22 05:10:00 0.102
Run Code Online (Sandbox Code Playgroud)
数据于2010-01-21 15:08结束,2010-01-22 05:10:00开始.因此,使用常量设置窗口大小可能无法解决此问题.有什么建议?非常感谢