在Pandas中按分组统计连续相同值的滚动未变更次数
解决Pandas分组内连续相同值的累计计数问题
要实现每个group分组内独立统计连续相同col值的累计次数,你需要对原代码进行调整,核心是先按group分组,再在每个组内识别连续相同值的片段,最后完成累计计数。
解决方案代码
import pandas as pd # 构造输入数据 df = pd.DataFrame({'group':list('ABABABABABABABAB'), 'col':list('aaaaaaaabbbbaabb')}) # 1. 按group分组,在每个组内标记连续相同col值的分组键 # 每个组内,当col与前一行不同时,生成新的分组标识 df['consecutive_group'] = df.groupby('group')['col'].apply(lambda x: x.ne(x.shift()).cumsum()) # 2. 按group和consecutive_group组合分组,计算累计计数(从0开始) df['count'] = df.groupby(['group', 'consecutive_group']).cumcount() # 验证结果 df['count_wanted'] = list('0011223300110000') print(df)
代码说明
- 第一步的
groupby('group')['col'].apply(...):确保只在同一个group内部判断col值是否和前一行不同,生成的consecutive_group是每个group内连续相同值的分组标记。 - 第二步的
groupby(['group', 'consecutive_group']).cumcount():在每个group的连续值片段内,从0开始累计计数,完全匹配需求中的输出要求。
结果验证
运行代码后,count列会和count_wanted列完全一致,实现了每个group独立统计连续相同值的次数。
内容的提问来源于stack exchange,提问作者alex
相关产品推荐
相关产品推荐

