Pandas GroupBy分组内计算连续相同Result值的Streak累计值实现方法
Pandas分组内连续相同Result值的Streak计算实现
实现代码
import pandas as pd # 构造示例输入 df_input = pd.DataFrame({ 'Name': ['A','B','A','A','C','C','B','A','B','C'], 'Result': [1,1,-1,-1,1,1,-1,1,-1,1] }) # 核心计算逻辑 # 1. 生成同分组内连续相同Result的块标识 df_input['block'] = df_input.groupby('Name')['Result'].transform(lambda x: (x != x.shift()).cumsum()) # 2. 按名称+块双重分组累加得到Streak df_input['Streak'] = df_input.groupby(['Name', 'block'])['Result'].cumsum() # 清理辅助列(可选) df_input.drop('block', axis=1, inplace=True)
逻辑说明
- 先按
Name字段分组,对比每一行和同分组内上一行的Result值,值不同或者是分组首行时标记为新的连续块,通过累加布尔值给每个连续块生成唯一标识 - 再按
Name和块标识双重分组,对Result做累加,相同连续块内的值会逐行累计,新块则从当前Result值开始计算,完全匹配要求的计算规则
运行后得到的结果和你给出的示例输出完全一致,可直接验证使用。
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

