如何用Python Pandas实现首0触发的values列1值计数器
Pandas实现指定规则的1计数生成
核心规则
- 首个0出现前的所有1,计数值为0
- 首个0之后:遇到1则计数器递增,遇到0则重置为0
代码实现
import pandas as pd # 构造示例数据(可替换为实际业务数据) df = pd.DataFrame({ 'Values': [1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1] }) # 定位第一个0的索引位置,作为计数逻辑的分界点 first_zero_idx = df[df['Values'] == 0].index[0] # 初始化计数列,先全部设为0,直接满足首个0前的计数规则 df['生成的计数值'] = 0 # 生成分组标识:每次遇到0则分组编号+1,把连续的1块划分为独立分组 groups = (df['Values'] == 0).cumsum() # 对第一个0之后的数据,按分组累加1的计数,自动实现遇1递增、遇0重置的效果 df.loc[first_zero_idx:, '生成的计数值'] = df.loc[first_zero_idx:].groupby(groups)['Values'].cumsum() # 输出结果 print(df)
代码说明
- 分界点定位:通过筛选第一个0的索引,精准区分前后两种计数逻辑的适用范围
- 初始值设置:直接将计数列全部设为0,一步满足“首个0前所有1计为0”的要求
- 分组逻辑:利用
cumsum()生成分组编号,把每个连续的1块和后面的0划分为一组,确保每组内的计数独立 - 分组累加:对分界点后的数据按分组做累加,1的累加值自然递增,0的累加值保持为0,完美匹配规则
运行代码后输出结果与示例完全一致。
内容的提问来源于stack exchange,提问作者jess
相关产品推荐
相关产品推荐

