如何在分组操作中按条件实现遇X重置的累计计数?
实现按X重置的非X值累计计数
可以用Pandas的分组和累计计数功能实现需求,核心思路是先按X的出现划分独立分组,再在每个分组内对非X行计数,X行直接设为0。
步骤1:构造示例数据
import pandas as pd data = {'Key': ['D', 'X', 'B', 'C', 'D', 'X', 'A', 'C', 'X', 'X']} df = pd.DataFrame(data)
步骤2:生成分组并计算累计值
# 按X的出现创建分组标识,每遇到一个X就开启新分组 group_ids = (df['Key'] == 'X').cumsum() # 每个分组内从1开始累计计数,再把X对应的行设为0 df['Res'] = df.groupby(group_ids).cumcount() + 1 df['Res'] = df['Res'].where(df['Key'] != 'X', 0)
最终结果
运行后得到的DataFrame与示例完全一致:
Key Res 0 D 1 1 X 0 2 B 1 3 C 2 4 D 3 5 X 0 6 A 1 7 C 2 8 X 0 9 X 0
代码解释
(df['Key'] == 'X').cumsum():通过对X的布尔值累加,把连续的非X行归为同一组,每出现一个X,组号就递增,确保后续非X行进入新的计数周期。groupby(group_ids).cumcount() + 1:让每个分组内的行从1开始计数,避免默认的0起步。where(df['Key'] != 'X', 0):把所有Key为X的行的Res值替换为0,匹配需求。
内容的提问来源于stack exchange,提问作者vicefreak04
相关产品推荐
相关产品推荐

