Pandas如何实现列值变化或连续False时递增、连续True计数静态的需求
实现Pandas自定义计数列的解决方案
核心实现代码如下:
import pandas as pd # 构造示例DataFrame df = pd.DataFrame({'A': [True, True, False, False, False, False, False, True, True, True, False]}) # 计算A值发生变化的行,首行默认触发计数 change_mask = df['A'].ne(df['A'].shift()).fillna(True) # 计算连续为False的行 continuous_false_mask = df['A'].eq(False) & df['A'].shift().eq(False) # 合并计数触发条件:A值变化 或 连续False increment_mask = change_mask | continuous_false_mask # 累计求和得到目标B列 df['B'] = increment_mask.cumsum() print(df)
运行后输出结果和要求完全一致:
A B 0 True 1 1 True 1 2 False 2 3 False 3 4 False 4 5 False 5 6 False 6 7 True 7 8 True 7 9 True 7 10 False 8
逻辑说明
- 用
ne方法对比当前行和上一行的A列值,得到A值发生变化的行标记,首行默认作为计数起始点设为True - 标记出连续为False的行,满足「后续行A为False时计数递增」的要求
- 两种标记取并集就是所有需要计数+1的位置,最后用累计求和
cumsum即可得到目标B列
内容的提问来源于stack exchange,提问作者Pedro Godwand
相关产品推荐
相关产品推荐

