基于连续条件对DataFrame进行分组的技术实现
解决连续相同Group值的时序数据分组问题
普通的groupby('Group')会把所有相同Group值的行归为一组,无法区分连续中断的情况。要实现连续相同Group值的独立分组,核心是生成一个连续分组标识,具体方案如下:
代码实现
import pandas as pd # 假设你的时序DataFrame名为df,包含Group字段 # 生成连续分组ID:当Group值与上一行不同时,ID递增 df['group_id'] = df['Group'].ne(df['Group'].shift()).cumsum() # 按group_id分组,将每个分组的DataFrame存入列表 grouped_dfs = [group for _, group in df.groupby('group_id')]
原理说明
df['Group'].shift():将Group字段向下偏移一行,用于和当前行比较ne():判断当前行Group值是否与上一行不同,返回布尔序列(True表示值变化)cumsum():对布尔序列累加(True=1,False=0),生成唯一的连续分组ID,相同连续Group值的行拥有同一个ID- 最后通过
groupby('group_id')分组,将每个分组转换为DataFrame存入列表
示例验证
假设原始数据如下:
| Time | Group | Value |
|---|---|---|
| 08:00 | A | 10 |
| 08:10 | A | 12 |
| 08:20 | B | 15 |
| 08:30 | B | 14 |
| 08:40 | A | 11 |
生成的group_id列值为[1,1,2,2,3],最终grouped_dfs会包含3个DataFrame,分别对应连续的A组、连续的B组、再次出现的A组,完全符合连续分组的需求。
这个方案基于pandas向量化操作,处理数千条时序数据效率极高,适合后续独立分析每个连续分组。
内容的提问来源于stack exchange,提问作者mshah
相关产品推荐
相关产品推荐

