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

在pandas滚动窗口中,offset参数的具体含义是什么?

理解pandas.DataFrame.rolling中的offset参数

我来给你把这个offset参数讲明白——其实它就是基于时间长度的滚动窗口,和咱们常用的固定行数的window完全不是一回事儿。

核心区别:固定window vs offset

  • 当你用window=N(N是整数)时,每个窗口都是固定的N行数据,不管这些数据对应的时间跨度有多大;
  • 而用window='offset_str'(比如'2H'、'1D'这种时间偏移字符串)时,窗口是按时间范围来划定的:每个窗口包含的是「当前行索引时间往前推offset时长内的所有数据」,窗口里的行数完全取决于这段时间里有多少条观测值,可能每行对应的窗口大小都不一样。

必须满足的前提

这个特性只对日期时间类型的索引有效,比如DatetimeIndex或者PeriodIndex,普通的数值索引、字符串索引用不了这个参数,而且它是pandas 0.19.0版本才新增的功能。

举个实际例子更清楚

比如我们有一份15分钟间隔的时间序列数据:

import pandas as pd
import numpy as np

# 创建从2024-01-01 00:00开始,每15分钟一条的10条数据
time_idx = pd.date_range(start='2024-01-01 00:00', periods=10, freq='15T')
df = pd.DataFrame({'data': np.arange(10)}, index=time_idx)

# 用2小时的时间窗口计算滚动均值
df['2h_rolling_mean'] = df['data'].rolling(window='2H').mean()

看结果的话:

  • 到2024-01-01 01:45这一行时,往前推2小时的范围是2023-12-31 23:45至2024-01-01 01:45,但我们的数据从00:00开始,所以这段时间里包含从00:00到01:45的8条数据(值为0到7),均值就是(0+1+2+3+4+5+6+7)/8 = 3.5;
  • 如果中间有一段时间没有数据(比如删掉2024-01-01 00:30和00:45的两行),用window='2H'计算时,窗口还是会取时间范围内的现有数据;但如果用固定window=8,就会强制取当前行往前数8行,哪怕这些数据的时间跨度远超2小时。

简单说,offset就是让你的滚动窗口跟着时间走,而不是跟着行数走,特别适合处理时间间隔不固定、有缺失值的时间序列数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:48:09