如何在Pandas中按指定列值切片,获取该值(含)后的连续行分组?
按指定列值分组切片DataFrame的解决方案
问题背景
给定如下DataFrame:
Col1 Col2 128 False 129 True 130 True 183 False 184 True 202 False 203 True 204 True
需要以Col2列的False值为分组起点,包含该行及后续连续行(直到下一个False出现前),最终得到元组列表:[(128, 129, 130), (183, 184), (202, 203, 204)]
实现步骤
- 创建示例DataFrame
import pandas as pd df = pd.DataFrame({ 'Col1': [128, 129, 130, 183, 184, 202, 203, 204], 'Col2': [False, True, True, False, True, False, True, True] })
- 生成分组标识
通过标记Col2为False的位置,用累计和生成唯一分组ID:
df['group_id'] = df['Col2'].eq(False).cumsum()
这里df['Col2'].eq(False)会生成布尔序列(False所在行对应True),cumsum()将其转为累计数值,每个False行都会触发分组ID递增,后续True行自动归到当前分组。
- 分组并转换为元组列表
按分组ID聚合,提取每组Col1的值并转为元组:
result = [tuple(group['Col1']) for _, group in df.groupby('group_id')]
验证结果
执行print(result)会输出:
[(128, 129, 130), (183, 184), (202, 203, 204)]
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

