pandas.series中的前滚时间窗口

时间:2018-02-15 14:39:41

标签: python pandas time

我想在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)

1 个答案:

答案 0 :(得分:0)

您可以参考此解决方案: Python: look back n days rolling standard deviation

然而,它仍然不是一个完美的解决方案。有人在Github提出了一个问题,但似乎没有人在研究它。这是链接https://github.com/pandas-dev/pandas/issues/6772