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
相关产品推荐
相关产品推荐

