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

如何提取Pandas时间列中连续15分钟间隔时段的首尾时间

提取Pandas时间列中连续15分钟间隔子集的首尾时间

需求说明

给定Pandas的Time列(格式为HH:MM:SS),需要提取所有连续且相邻间隔严格为15分钟的时间序列子集,返回每个子集的首尾时间组成的字典列表。示例如下:

示例1

输入时间列:

Time
7:00:00
7:15:00
7:30:00
8:00:00
8:15:00
8:30:00
8:45:00

输出结果:

[{"start_time": "7:00:00", "end_time": "7:30:00"}, {"start_time": "8:00:00", "end_time": "8:45:00"}]

示例2

输入时间列:

Time
7:00:00
7:15:00
7:30:00

输出结果:

[{"start_time": "7:00:00", "end_time": "7:30:00"}]

示例3

输入时间列:

Time
7:00:00
7:15:00
7:30:00
8:00:00
9:00:00
10:00:00
10:15:00
10:30:00
11:00:00

输出结果:

[{"start_time": "7:00:00", "end_time": "7:30:00"}, {"start_time": "10:00:00", "end_time": "10:30:00"}]

解决方案

以下是实现该需求的Pandas代码步骤:

步骤1:准备数据与导入依赖

import pandas as pd

# 以示例1数据为例构造DataFrame
df = pd.DataFrame({
    'Time': ["7:00:00", "7:15:00", "7:30:00", "8:00:00", "8:15:00", "8:30:00", "8:45:00"]
})

步骤2:转换时间列类型

将Time列转换为可计算的时间类型:

df['Time'] = pd.to_datetime(df['Time'], format='%H:%M:%S').dt.time

步骤3:生成分组标签

计算相邻时间的差值,标记出间隔非15分钟的位置,以此生成连续序列的分组ID:

# 计算相邻时间的分钟差
time_diff = df['Time'].diff().apply(lambda x: x.total_seconds() / 60)
# 生成分组ID,间隔非15分钟时开启新分组
df['group_id'] = (time_diff != 15).cumsum()

步骤4:分组聚合首尾时间

按分组ID聚合,提取每组的首尾时间并转换为目标格式:

# 分组获取每组首尾时间
result_df = df.groupby('group_id')['Time'].agg(['first', 'last'])
# 转换为要求的字典列表
result = result_df.apply(lambda row: {
    'start_time': row['first'].strftime('%H:%M:%S'),
    'end_time': row['last'].strftime('%H:%M:%S')
}, axis=1).tolist()

print(result)

运行结果(示例1)

[{"start_time": "7:00:00", "end_time": "7:30:00"}, {"start_time": "8:00:00", "end_time": "8:45:00"}]

替换初始df的数据源即可适配另外两个示例,得到对应结果。


内容的提问来源于stack exchange,提问作者Brayan Muñoz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 00:45:22