我想在pandas中使用滚动时间窗口来看前视窗口。我该怎么做?
import pandas as pd
data = pd.DataFrame({'t': ['2017-02-02 15:00:01',
'2017-02-02 15:00:02',
'2017-02-02 15:01:00',
'2017-02-02 15:03:05',
'2017-02-02 15:08:00'],
'value': [1, 2, 3, 14, 5]})
data['t'] = data['t'].apply(pd.to_datetime)
data = data.set_index('t')
backward_max = data.rolling('300s').max() # yields [1, 2, 3, 14, 14]
forward_max = '???' # should yield [14, 14, 14, 14, 5]
问题在于,由于观察之间的时间差异不均匀,我不能简单地将结果从后视窗口移开。
我可以计算出相反顺序的假时间戳,并使用后向时间窗口,可以从here得出,但我几乎可以肯定有更优雅的方式。
修改:将所有时间戳更改为同一天,并提供以下解决方法代码,因为它不够优雅。
data2 = data.reset_index()
data2['t2'] = max(data2['t']) - (data2['t'] - min(data2['t']))
data2 = data2.set_index('t2').sort_index()
forward_max = np.flip(data2.rolling('300s')['value'].max().values, axis=0)
答案 0 :(得分:0)
您可以参考此解决方案: Python: look back n days rolling standard deviation
然而,它仍然不是一个完美的解决方案。有人在Github提出了一个问题,但似乎没有人在研究它。这是链接https://github.com/pandas-dev/pandas/issues/6772