Pandas groupby 将每个组视为一个独特的组

Pandas groupby with each group treated as a unique group

请协助。如何获得 pandas groupby 的 cumsum,但我的数据是布尔值 0 和 1。我想将每组 0 或 1 视为唯一值,并在满足新值时重置计数。

我目前有这个总结所有 1 和 0 的值

df['grp'] = df.groupby("dir")["dir"].cumsum())

我想要的输出

df  = pd.DataFrame({"dir":[1,1,1,1,0,0,0,1,1,1,1,0,0,0],
                  "grp": [1,2,3,4,1,2,3,1,2,3,4,1,2,3,]})

使用:

In [1495]: df['grp'] = df.groupby((df['dir'] != df['dir'].shift(1)).cumsum()).cumcount()+1

In [1496]: df
Out[1496]: 
    dir  grp
0     1    1
1     1    2
2     1    3
3     1    4
4     0    1
5     0    2
6     0    3
7     1    1
8     1    2
9     1    3
10    1    4
11    0    1
12    0    2
13    0    3