如何提取Pandas DataFrame中布尔值标记的连续时间段起止时间
实现方法
核心思路
要区分连续的True布尔段,核心是给每一段连续的相同布尔值分配唯一的分组ID,过滤掉False段后,按组聚合取时间的最小、最大值即可得到每段的起止时间戳。
完整代码
假设你的布尔序列变量名为at_series,索引为datetime类型,索引名称为t:
import pandas as pd # 生成连续段分组ID:当前值与前一个值不同时,分组ID累加1 group_id = (at_series != at_series.shift()).cumsum() # 过滤True段,按分组聚合得到起止时间 result = at_series[at_series].reset_index()\ .groupby(group_id[at_series])['t']\ .agg(start_time='min', end_time='max')\ .reset_index(drop=True)
结果示例
运行后得到的result结构如下,和预期的两段区间完全匹配:
start_time end_time 0 2021-06-19 21:29:38 2021-06-19 21:29:58 1 2021-06-19 21:30:58 2021-06-19 21:32:48
内容的提问来源于stack exchange,提问作者Määäx
相关产品推荐
相关产品推荐

