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

如何用Pandas的DataFrame.rolling实现无重叠72小时滚动窗口?

72小时无重叠滚动窗口+剔除NaN的实现方案

可以用DataFrame.rolling实现,不过用resample会更贴合无重叠窗口的需求,两种方案如下:

方法一:用rolling实现(支持无重叠)

如果你的pandas版本在1.3.0及以上,可直接通过rolling的step参数控制窗口无重叠:

import pandas as pd

# 假设你的DataFrame为df,索引是datetime64类型的小时粒度数据
# 设置72小时窗口,步长72小时(确保窗口间无重叠)
rolling_window = df.rolling(window='72H', step=72, closed='left')

# 若要获取每个窗口剔除NaN后的原始数据,用apply处理
windowed_clean_data = rolling_window.apply(lambda win: win.dropna(), raw=False)

# 若做聚合统计(如均值、求和),聚合函数默认自动跳过NaN,直接调用即可
windowed_mean = rolling_window.mean()

注:closed='left'确保窗口包含起始时间点,可根据需求调整为right或both。

方法二:用resample更高效(推荐)

无重叠固定时间窗口本质是按周期分块,resample天生适配这类场景,代码更简洁效率更高:

# 按72小时周期分块,获取每个窗口剔除NaN后的数据
resampled_clean = df.resample('72H').apply(lambda group: group.dropna())

# 聚合统计同样自动跳过NaN,比如求均值
resampled_mean = df.resample('72H').mean()

如果你的pandas版本过低不支持rolling的step参数,可手动按索引分组处理:

# 给每条数据标记所属的72小时窗口组
df['window_tag'] = df.index.floor('72H')
# 按窗口组分组后剔除NaN
grouped_clean = df.groupby('window_tag').apply(lambda g: g.dropna())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 22:40:39