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

如何用Pandas实现时间序列数据的滑动时间段分块分析?

嘿,这个场景我太熟悉了!resample确实只能做固定时间间隔的分段统计,没法实现你要的滑动窗口计算——不过别担心,Pandas里的rolling()方法就是专门干这个的,完美匹配你的需求。

具体实现步骤

首先得确保你的数据集时间索引是正确的:

# 先把时间列转为datetime类型(假设你的时间列叫'timestamp')
df['timestamp'] = pd.to_datetime(df['timestamp'])
# 将时间列设置为DataFrame的索引
df = df.set_index('timestamp')

接下来分两种情况处理:

情况1:数据是严格每秒一条(无缺失、无重复)

这种情况下直接用数字窗口最高效,因为时间间隔完全固定:

# 计算指定字段(比如叫'metric')的30秒滑动平均值
df['30s_rolling_avg'] = df['metric'].rolling(window=30).mean()

这里window=30表示每次取连续30行数据(对应30秒)计算平均值,每一行的结果就是以当前行为结尾的前30秒平均值(比如第30行对应0-29秒,第31行对应1-30秒,完全符合你要的滑动逻辑)。

然后直接找最高平均值:

highest_avg = df['30s_rolling_avg'].max()

如果还想知道这个最高平均值对应的窗口时间段,可以用idxmax()定位:

peak_timestamp = df['30s_rolling_avg'].idxmax()
# 对应的窗口就是 peak_timestamp - 29秒 到 peak_timestamp

情况2:数据存在时间缺失/不固定间隔

这种时候就得用时间窗口来保证每次取的是连续30秒的数据,而不是固定行数:

# 按30秒滑动窗口计算平均值,closed='both'确保包含窗口首尾的时间点
df['30s_rolling_avg'] = df['metric'].rolling(window='30s', closed='both').mean()

这个方法会自动根据时间戳筛选每个滑动窗口内的数据,哪怕中间有缺失也能准确计算对应30秒区间的平均值。

为什么这个方法最优?

rolling()是Pandas原生的滑动窗口计算工具,底层做了优化,性能比自己手动循环切片计算高得多,而且语法简洁,能轻松扩展到其他统计量(比如求和、中位数等)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:17:12