【问题标题】:How can I implement time based time series windowing?如何实现基于时间的时间序列窗口?
【发布时间】:2021-02-28 14:08:13
【问题描述】:

我想将具有DatetimeIndex 的熊猫系列窗口化到最后 X 秒。通常我会使用pandas.Series.rolling 进行窗口化。但是,日期时间索引不是等距的,这意味着我无法以可靠的方式计算数据点的数量。如何实现基于时间的窗口化(例如,通过实现 BaseIndexer 子类并将其传递给 rolling()window 参数)?

【问题讨论】:

  • df.rolling('2s') 这样的东西不工作吗?这里的“2s”表示最后2秒
  • 不,它没有。如果您查看 API,window 必须是一个 int 或 BaseIndexer 子类的实例。
  • 内置的 BaseIndex 子类 github.com/pandas-dev/pandas/blob/master/pandas/core/window/… 也没有帮助。
  • 文档(您共享的链接)最后有一个带有df.rolling('2s') 的示例 - 虽然我还没有尝试过
  • 这个例子适用于数据框,我完全忽略了它。但是似乎也适用于系列。我得到了一个 Rolling 对象实例,但我需要以某种方式将它转换回 pd.Series。

标签: python python-3.x pandas time-series


【解决方案1】:

从我想出的日期时间索引系列中获取最后 X 秒的最简单方法是获取 newest_timestamp = series.index.max(),计算要从中考虑的最旧时间戳 oldest_timestamp = newest_timestamp - pd.to_timedelta(<X-seconds>, unit='s') 并切片 windowed_series = series[oldest_timestamp:newest_timestamp。因为oldest_timestamp 不是从系列中提取的,但计算出的切片操作通常不会完全匹配。不过这并不重要,因为它会自动处理。

注意:series.rolling() 通常用于时间序列数据预处理上下文(例如,在窗口内加权样本,取决于作为预测应用程序一部分的函数)而不是普通窗口用例。

【讨论】:

    猜你喜欢
    • 2013-09-12
    • 2018-11-14
    • 2020-08-07
    • 2019-02-09
    • 1970-01-01
    • 2022-08-16
    • 1970-01-01
    • 2011-04-28
    • 2015-02-20
    相关资源
    最近更新 更多