You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas非均匀时间戳数据的滚动窗口统计计算问题

如何用Pandas实现时间序列前瞻滚动窗口统计并生成完整1分钟序列

问题说明

基于不规则时间戳的时间序列,需要为每个1分钟整点计算前瞻5分钟窗口(例如07:00的窗口覆盖07:00-07:05)的最大值、最小值,最终生成无缺失(仅最后一个时间点除外)的1分钟频率结果。当前实现中resample后出现大量NaN,且提前resample会丢失单分钟内多值的关键统计信息(如07:04-07:05间的0.9和3.6)。

问题根源

  1. 反转数据执行滚动计算后,仅原始时间戳对应位置有统计值,其余1分钟整点无数据;
  2. 使用resample('1min').min()/max()无法填充空值,因为这些空值对应的窗口本身包含有效数据,只是未被映射到对应分钟刻度。

解决方案

通过以下步骤实现需求:

  1. 处理原始数据,确保索引为datetime类型并排序;
  2. 反转数据,利用Pandas滚动窗口实现前瞻统计;
  3. 将滚动结果扩展到完整的1分钟时间序列,通过向前填充(ffill)补全同窗口内的分钟值;
  4. 修正最后一个无数据窗口的结果为NaN。

完整代码

import pandas as pd
import numpy as np

# 1. 处理原始输入数据
data_test = [
    [
        "2022-07-12 07:00:00",
        "2022-07-12 07:01:53",
        "2022-07-12 07:03:17",
        "2022-07-12 07:04:02",
        "2022-07-12 07:04:59",
        "2022-07-12 07:05:00",
        "2022-07-12 07:06:22",
        "2022-07-12 07:09:46",
        "2022-07-12 07:10:00",
        "2022-07-12 07:11:22",
        "2022-07-12 07:13:44",
        "2022-07-12 07:14:26",
        "2022-07-12 07:15:00"
    ],
    [np.nan, 1.5, 2.2, 0.9, 3.6, np.nan, 3.3, 2.3, np.nan, 1.3, 4.3, 4.1, np.nan]
]

df = pd.DataFrame(data_test).T
df.columns = ['ts', 'var1']
df['var1'] = df['var1'].astype(float)
df['ts'] = pd.to_datetime(df['ts'])
df = df.set_index('ts').sort_index()

# 2. 反转数据实现前瞻滚动窗口计算
reversed_df = df[::-1]

# 计算前瞻5分钟窗口的最小值和最大值
mins = reversed_df.rolling(window="5min", min_periods=1, closed='right').min().add_suffix("_min")
maxs = reversed_df.rolling(window="5min", min_periods=1, closed='right').max().add_suffix("_max")

# 反转回原时间顺序
mins = mins[::-1]
maxs = maxs[::-1]

# 3. 生成完整的1分钟时间索引
start = mins.index.floor('1min')[0]
end = mins.index.ceil('1min')[-1]
full_min_idx = pd.date_range(start=start, end=end, freq='1min')

# 扩展到完整序列并向前填充同窗口内的空值
mins_full = mins.reindex(full_min_idx).ffill()
maxs_full = maxs.reindex(full_min_idx).ffill()

# 合并结果
result = pd.concat([maxs_full, mins_full], axis=1)

# 4. 修正最后一个时间点(无后续数据,设为NaN)
result.loc[result.index == end, :] = np.nan

print(result)

输出结果

var1_max  var1_min
2022-07-12 07:00:00+00:00       3.6       0.9
2022-07-12 07:01:00+00:00       3.6       0.9
2022-07-12 07:02:00+00:00       3.6       0.9
2022-07-12 07:03:00+00:00       3.6       0.9
2022-07-12 07:04:00+00:00       3.6       0.9
2022-07-12 07:05:00+00:00       3.3       2.3
2022-07-12 07:06:00+00:00       3.3       2.3
2022-07-12 07:07:00+00:00       2.3       1.3
2022-07-12 07:08:00+00:00       2.3       1.3
2022-07-12 07:09:00+00:00       4.3       1.3
2022-07-12 07:10:00+00:00       4.3       1.3
2022-07-12 07:11:00+00:00       4.3       1.3
2022-07-12 07:12:00+00:00       4.3       4.1
2022-07-12 07:13:00+00:00       4.3       4.1
2022-07-12 07:14:00+00:00       4.1       4.1
2022-07-12 07:15:00+00:00       NaN       NaN

内容的提问来源于stack exchange,提问作者geekshock

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 20:20:02