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

Pandas下采样非均匀时间序列至固定6小时点遇异常求助

解决非均匀时间序列下采样到固定6小时时间点的问题

问题背景

需要将非均匀亚小时间隔的数据集下采样为6小时频率,固定时间点为00:00、06:00、12:00、18:00,规则如下:

  • 若目标时间点存在原始数据,直接保留该数据;
  • 若目标时间点无原始数据,取最近的前序原始数据,不做额外处理。

使用data.resample('6H').last()时出现异常:从2022-10-31开始,18:00的采样结果取到的是17:30的数据,而非预期的18:00数据点。

问题原因

默认的resample('6H')会以数据集的第一个时间点(此处为2022-10-29 18:00)作为区间起始点划分6小时窗口,导致窗口标签与需求的固定时间点错位:

  • 2022-10-31 12:00~18:00的窗口包含到17:30的数据,last()会取该窗口的最后一条数据(17:30);
  • 2022-10-31 18:00的原始数据被划分到18:00~次日00:00的窗口中,无法作为18:00时间点的采样结果。

解决方案

方法一:指定resample的origin参数对齐固定时间点

通过origin参数强制将6小时窗口的起始点对齐到每天的00:00,让窗口标签完全匹配需求的固定时间点,last()即可正确取到每个窗口内的最后一条数据(包括目标时间点本身)。

# 对齐到每天的起始时间(00:00)
resampled_data = data.resample('6H', origin='start_day').last()

# 或直接指定明确的起始时间,确保完全匹配
resampled_data = data.resample('6H', origin='2022-10-29 00:00:00').last()

方法二:生成目标时间序列后用前向填充

直接生成符合要求的固定时间点序列,再用reindex结合前向填充(method='ffill')实现需求,这种方式更直观,完全匹配规则逻辑:

# 生成目标时间序列:从数据最早日期的00:00到最晚日期的00:00,间隔6小时
start_time = data.index.min().floor('D')
end_time = data.index.max().ceil('D')
target_time_points = pd.date_range(start=start_time, end=end_time, freq='6H')

# 前向填充:存在数据则保留,无数据取最近前序数据
resampled_data = data.reindex(target_time_points, method='ffill')

结果验证

两种方法均能得到符合预期的结果,例如2022-10-31 18:00的采样值会是原始数据中的8790.3,而非17:30的8790.4。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 06:50:56