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

Pandas如何对连续重复label分组 分别计算各区间time最值

Pandas 连续重复标签分组计算区间最值方案

直接按label字段分组会合并所有同标签数据,无法拆分非连续的同标签段,实现核心是先为每一段连续重复的标签生成唯一分组标识,再基于该标识做聚合计算。


实现步骤

  • 构造示例数据集
import pandas as pd

df = pd.DataFrame({
    'time': ['01:01','01:02','01:03','01:04','01:05','01:06','01:07','01:08'],
    'label': ['A','A','A','C','C','A','A','A']
})
  • 生成连续段唯一ID
    核心逻辑:逐行对比当前行标签和上一行标签,标签发生变化时,判定为进入新的连续段,段ID累加1。
# 错位对比相邻行标签,累加布尔值生成独立段ID
df['segment_id'] = (df['label'] != df['label'].shift()).cumsum()

shift()方法会将列向下错位一行,第一行错位后为空值,和第一行标签对比结果为True,会作为第一个段的起始标记

  • 分组聚合计算区间最值
    同时按段ID和标签分组,保证同标签的不同连续段不会被合并,聚合计算每个段的time最小值、最大值即可:
result = df.groupby(['segment_id', 'label'], as_index=False).agg(
    min_time=('time', 'min'),
    max_time=('time', 'max')
)

输出结果

最终返回结果如下,A标签的两段独立连续区间被正确拆分:

  • 第一段A:min_time = 01:01,max_time = 01:03
  • 连续C段:min_time = 01:04,max_time = 01:05
  • 第二段A:min_time = 01:06,max_time = 01:08

注:如果time列是datetime时间格式而非字符串,上述逻辑完全通用,min/max聚合对时间类型数据同样生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 20:45:51