如何重采样时间序列生成从首条记录开始的固定5分钟间隔序列
时间序列5分钟固定间隔重采样实现思路
基于Python pandas库可以快速实现需求,具体实现路径如下:
前置预处理
首先把原始数据处理为标准时间序列结构:
- 读取原始数据,将
date字段解析为datetime64时间类型 - 把时间列设为数据索引,按时间升序排序,确保索引第一个值就是要求的重采样起点
示例预处理代码:
import pandas as pd # 加载原始数据 raw_data = [ ("08/08/2012 08:00:00", 0.94843), ("08/08/2012 08:05:00", 0.92313), ("08/08/2012 08:06:21", 0.90432), ("08/08/2012 08:10:10", 0.99192), ("08/08/2012 08:15:00", 0.91233), ("08/08/2012 08:17:37", 0.94841), ("08/08/2012 08:34:19", 0.91221) ] df = pd.DataFrame(raw_data, columns=["date", "value"]) df["date"] = pd.to_datetime(df["date"], format="%d/%m/%Y %H:%M:%S") df = df.set_index("date").sort_index()
方案1:生成连续5分钟序列、空窗期向前填充(匹配第一种输出)
该方案会补全所有5分钟间隔节点,无新观测值的区间沿用最近一次的有效值:
- 以第一个时间点为起点,生成步长5分钟、覆盖到原始数据最晚时间点的完整时间索引
- 对齐原始数据到新索引,同一个5分钟区间内的多个观测值,取区间内最后一个观测值作为该区间的取值
- 无观测值的空节点,用前向填充(ffill)规则补全数值
核心实现代码:
start_time = df.index[0] end_time = df.index[-1] # 生成以首点为起点的5分钟间隔索引 new_index = pd.date_range(start=start_time, end=end_time, freq="5min") # 重采样+前向填充 resampled_df = df.resample("5min", origin=start_time, label="left").last().reindex(new_index).ffill()
运行结果和第一种输出完全匹配:空窗的08:20、08:25、08:30节点会填充前序有效值0.94841,08:35节点取08:34:19对应的0.91221。
关键参数说明:
origin=start_time会强制重采样的间隔计算起点为第一个事件时间,不会默认对齐到自然时间的整5分刻度,即使首条数据不是整5分时间点也能按要求生成间隔。
方案2:仅保留有观测值映射的5分钟节点(匹配第二种输出)
该方案不补全无观测值的空窗节点,只保留存在原始数据映射的5分钟刻度点:
- 同样以首点为原点做5分钟重采样,聚合规则保持为取每个区间内最后一个观测值
- 直接删除重采样后无对应原始观测值的空行即可
核心实现代码:
start_time = df.index[0] resampled_df = df.resample("5min", origin=start_time, label="left").last().dropna()
运行结果和第二种输出完全匹配:会跳过08:25、08:30两个无对应观测值的节点,只保留有有效值的时间点。
内容的提问来源于stack exchange,提问作者havealittlepatienceah
相关产品推荐
相关产品推荐

