对于每个 = 1 的二进制,group_id 应该增加,但将所有连续的 0 分组到一个 group_id 中,下一组连续的 0 位于另一个 group_id 中。
我一直在用
df['group_id1'] = df['diff'].cumsum()
并获取 group_id1 列作为结果。我正在寻找的结果是group_id2。
diff group_id1 group_id2
0 1 1 1
1 0 1 2
2 0 1 2
3 0 1 2
4 0 1 2
5 0 1 2
6 0 1 2
7 0 1 2
8 0 1 2
9 1 2 3
10 1 3 4
11 1 4 5
12 1 5 6
13 1 6 7
14 1 7 8
15 1 8 9
16 1 9 10
17 1 10 11
18 0 10 12
19 0 10 12
diff
来识别1前面的0:
df['group_id2'] = (df['diff'].eq(1)|df['diff'].diff().eq(-1)).cumsum()
shift
:
df['group_id2'] = (df['diff'].eq(1)
|(df['diff'].eq(0)&df['diff'].shift().eq(1))
).cumsum()
另一种变体:
s = df['diff'].eq(1)
df['group_id2'] = (s|s.shift()).cumsum()
输出:
diff group_id2
0 1 1
1 0 2
2 0 2
3 0 2
4 0 2
5 0 2
6 0 2
7 0 2
8 0 2
9 1 3
10 1 4
11 1 5
12 1 6
13 1 7
14 1 8
15 1 9
16 1 10
17 1 11
18 0 12
19 0 12