pandas.series 中的前滚时间窗口

use*_*813 5 python time pandas

我想在 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]
Run Code Online (Sandbox Code Playgroud)

问题是,由于观察之间的时间差不相等,我不能简单地从向后观察的窗口中移动结果。

我可以计算以相反顺序运行的假时间戳并使用向后的时间窗口,正如可以从这里导出的那样,但我几乎可以肯定有一种更优雅的方法。

编辑:将所有时间戳更改为同一天,并提供以下解决方法代码,尽管它并不优雅。

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)
Run Code Online (Sandbox Code Playgroud)

luo*_*o23 -1

可以参考这个解决方案: Python:回头看n天滚动标准差

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