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

如何将Pandas时间序列按相同时间间隔分组为子序列?

按相同时间间隔拆分Pandas时间序列

要实现将时间序列按连续相同时间间隔拆分为子序列的需求,可以通过计算相邻时间戳的间隔、标记分组ID,再按分组拆分的方式完成,具体步骤如下:

1. 计算相邻时间戳的间隔

首先获取时间序列索引的相邻差值,得到每个位置与前一个位置的时间间隔:

time_diffs = series.index.diff()

2. 生成分组ID

通过比较当前间隔与前一个间隔是否相同,标记出需要拆分的位置,再累加生成连续的分组ID:

# 当当前间隔与前一个不同时,标记为新分组,累加得到分组ID
group_ids = (time_diffs != time_diffs.shift(1)).cumsum() - 1

这里time_diffs.shift(1)将间隔序列整体后移一位,与原序列比较后得到布尔值序列(True表示间隔变化),cumsum()将布尔值转为整数累加,最终得到每个元素对应的分组ID。

3. 按分组ID拆分序列

使用groupby按分组ID拆分原序列,转换为列表即可得到目标结果:

grouped_series = [sub_series for _, sub_series in series.groupby(group_ids)]

完整示例代码

import pandas as pd
import numpy as np

# 构造示例时间序列
min_dates = pd.date_range('2018-06-12 08:01:00', periods=3, freq='T')
hour_dates = pd.date_range('2018-09-12 15:00:00', periods=3, freq='H')
dates = min_dates.append(hour_dates)
series = pd.Series([0.5456, 0.4734, 0.6723, 1.2449, 1.2834, 1.4923], index=dates)

# 计算时间间隔
time_diffs = series.index.diff()

# 生成分组ID
group_ids = (time_diffs != time_diffs.shift(1)).cumsum() - 1

# 拆分得到子序列列表
grouped_series = [sub_series for _, sub_series in series.groupby(group_ids)]

# 输出结果
for idx, sub in enumerate(grouped_series):
    print(f"--- 子序列 {idx+1} ---")
    print(sub)
    print(f"时间间隔: {sub.index.diff().unique()[0]}\n")

输出效果

--- 子序列 1 ---
2018-06-12 08:01:00    0.5456
2018-06-12 08:02:00    0.4734
2018-06-12 08:03:00    0.6723
dtype: float64
时间间隔: 0 days 00:01:00

--- 子序列 2 ---
2018-09-12 15:00:00    1.2449
2018-09-12 16:00:00    1.2834
2018-09-12 17:00:00    1.4923
dtype: float64
时间间隔: 0 days 01:00:00

这种方法能准确识别连续的相同间隔块,拆分出无重叠的子序列,完全匹配需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 11:40:48