当当前类别与前一个类别相同时,赋予相同的组ID:
gid = df['class'].ne(df['class'].shift()).cumsum()
df['consecutive_count'] = df.groupby(gid).transform('size')
输出结果:
>>> df
class consecutive_count
0 a 3
1 a 3
2 a 3
3 b 2
4 b 2
5 c 1
6 d 1
7 e 3
8 e 3
9 e 3
10 f 1
11 a 1
12 c 1
13 d 2
14 d 2
中间计算结果:
>>> gid
0 1 # 当前的 'a' 类别不同于 None(第一个值)
1 1
2 1
3 2 # 'b' 类别不同于 'a'
4 2
5 3 # 'c' 类别不同于 'b'
6 4 # 'd' 类别不同于 'c'
7 5 # 'e' 类别不同于 'd'
8 5
9 5
10 6 # 'f' 类别不同于 'e'
11 7 # 'a' 类别不同于 'f'
12 8 # 'c' 类别不同于 'a'
13 9 # 'd' 类别不同于 'c'
14 9
Name: class, dtype: int64