【问题标题】:Forward rolling time windows in pandas.seriespandas.series 中的前向滚动时间窗口
【发布时间】:2018-07-26 08:40:49
【问题描述】:

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

【问题讨论】:

  • 为什么最后一个是 5 ?而不是 14 ?
  • 点的值为 [1, 2, 3, 14, 5]。一个从最后一点开始的前视窗只包含那个点,所以最大值就是最后一点的值,即5。
  • 基于时间的窗口移动(或向后滚动)绝对是 pandas 中缺少的功能。假时间戳是我能够有效地做到这一点的唯一方法(对于通用的非等间距数据)。

标签: python pandas time


【解决方案1】:

一种可能的解决方案是移动滚动窗口聚合

【讨论】:

  • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
【解决方案2】:

你可以参考这个解决方案: Python: look back n days rolling standard deviation

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

【讨论】:

  • 据我了解他们提出的解决方案,他们有固定的时间间隔,而我的情况并非如此。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-16
  • 2021-05-12
  • 1970-01-01
  • 2020-07-13
  • 1970-01-01
相关资源
最近更新 更多