Pandas如何基于两列条件识别连续行并拆分DataFrame分组
Pandas按连续条件段拆分分组实现
实现逻辑
- 逐行标记是否符合筛选规则:
flag_0 == 3且flag_1 == 1 - 对不符合条件的行做累计求和,自动为每个独立的连续符合条件的行段分配唯一组ID
- 过滤掉不符合条件的行,按组ID拆分即可得到所有目标分组
完整代码
import pandas as pd # 构造测试DataFrame df = pd.DataFrame({ 'flag_0':[1,2,3,1,2,3,1,2,3,3,3,3,1,2,3,1,2,3,4,4], 'flag_1':[1,2,3,1,2,3,1,2,1,1,1,1,1,2,1,1,2,3,4,4], 'dd':[1,1,1,7,7,7,8,8,8,1,1,1,7,7,7,8,8,8,5,7] }) # 标记匹配筛选条件的行 df['is_match'] = (df['flag_0'] == 3) & (df['flag_1'] == 1) # 为连续匹配段生成独立组ID df['gid'] = (~df['is_match']).cumsum() # 拆分得到分组列表,自动过滤不匹配行,删除过程中生成的辅助列 group_list = [g.drop(columns=['is_match', 'gid']) for _, g in df[df['is_match']].groupby('gid')]
结果说明
遍历group_list即可按顺序得到所有符合要求的分组:
- 第一个分组:
flag_0 flag_1 dd 8 3 1 8 9 3 1 1 10 3 1 1 11 3 1 1
- 第二个分组:
flag_0 flag_1 dd 14 3 1 7
按照给出的测试数据,索引8的行同样满足
flag_0=3、flag_1=1且与9-11行连续,因此归入第一个分组。如果有额外过滤规则,可在is_match标记步骤补充对应判断条件即可。
内容的提问来源于stack exchange,提问作者waqar ali
相关产品推荐
相关产品推荐

