如何对布尔列累计统计True值并遇到False时重置计数
连续True值累计计数实现方案
针对布尔列实现连续True计数、遇False重置为0的需求,可根据你的使用场景选择对应实现方法:
1. Pandas DataFrame 实现
如果你用pandas处理表格数据,可直接用分组累加的方案实现:
核心代码
import pandas as pd # 构造示例数据,可替换为你自己的DataFrame df = pd.DataFrame({ 'bool': [False, True, True, True, False, True, True, False, False] }) # 计数逻辑 df['count'] = df['bool'].groupby((~df['bool']).cumsum()).cumsum().astype(int)
运行结果
输出完全符合预期:
bool count 0 False 0 1 True 1 2 True 2 3 True 3 4 False 0 5 True 1 6 True 2 7 False 0 8 False 0
逻辑说明
- 用
~df['bool']对原布尔列取反,原列的False会变为True,True变为False - 对取反后的结果执行
cumsum()累加:只有原列是False的时候累加值才会+1,以此把连续的True划分到同一个分组 - 对每个分组内的原布尔列执行
cumsum()累加,天然就能得到同组内连续True的计数,False位置的累加结果为0,刚好符合需求
2. 原生Python列表实现
如果你的数据是Python列表形式,无需依赖第三方库,直接遍历即可:
bool_list = [False, True, True, True, False, True, True, False, False] count_list = [] current_count = 0 for val in bool_list: current_count = current_count + 1 if val else 0 count_list.append(current_count)
运行后count_list结果为[0, 1, 2, 3, 0, 1, 2, 0, 0],符合需求。
内容的提问来源于stack exchange,提问作者Crcordova
相关产品推荐
相关产品推荐

