条件为真启动计数、下次为真重置的count列计算方法
实现方案
核心逻辑分三步处理:
- 首个
TRUE出现前的FALSE行,count列留空 - 每遇到
bool=TRUE的行,count固定为0,同时重置计数起点 - 相邻两个
TRUE之间的FALSE行,从1开始逐行递增;连续出现TRUE时每一行都重置为0
以Python pandas环境为例,计算代码如下:
import pandas as pd # 加载/构造源数据,这里用示例数据做演示 df = pd.DataFrame({ 'bool': [False, False, True, False, False, False, True, False, True, True] }) # 1. 生成计数周期分组标签:每遇到一次TRUE,分组标签值+1,同一段计数周期的行归属同一分组 df['group_tag'] = df['bool'].cumsum() # 2. 分组内按行顺序生成序号,序号减1让TRUE所在行的计数值为0,后续行依次递增 df['count'] = df.groupby('group_tag').cumcount() - 1 # 3. 把第一个TRUE之前的行(分组标签为0)的count值置空 df.loc[df['group_tag'] == 0, 'count'] = None # 清理辅助列 df = df.drop(columns='group_tag')
执行后得到的结果和预期完全一致:
| 索引 | bool | count |
|---|---|---|
| 0 | FALSE | None |
| 1 | FALSE | None |
| 2 | TRUE | 0 |
| 3 | FALSE | 1 |
| 4 | FALSE | 2 |
| 5 | FALSE | 3 |
| 6 | TRUE | 0 |
| 7 | FALSE | 1 |
| 8 | TRUE | 0 |
| 9 | TRUE | 0 |
这个写法天然兼容所有边界场景:开头任意长度的连续FALSE、连续多个TRUE、两个TRUE之间间隔任意数量FALSE都能正确计算,不需要手动写循环遍历,执行性能更好。
内容的提问来源于stack exchange,提问作者junyu
相关产品推荐
相关产品推荐

