在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
相关产品推荐
相关产品推荐

