您可以使用:
import numpy as np
ref = [1, 2, 3, 4, 5, 6]
# get first row of each stretch
m1 = df['ciclo'].diff().ne(1)
# form groups
group = m1.cumsum()
# identify groups equal to ref
m2 = (df.groupby([group, 'equipo'])['ciclo']
.transform(lambda s: np.array_equal(s, ref))
)
# increment count
df['id_nuevo'] = (m1&m2).cumsum().where(m2)
输出:
id ciclo equipo id_nuevo
0 1428171 3 Eq01 NaN
1 1427533 4 Eq01 NaN
2 1427950 5 Eq01 NaN
3 1427956 6 Eq01 NaN
4 1427957 1 Eq01 1.0
5 1427960 2 Eq01 1.0
6 1427913 3 Eq01 1.0
7 1430050 4 Eq01 1.0
8 1431974 5 Eq01 1.0
9 1431534 6 Eq01 1.0
10 1428030 1 Eq01 NaN
11 1428031 2 Eq01 NaN
12 1427930 3 Eq01 NaN
13 1427601 1 Eq01 2.0
14 1427578 2 Eq01 2.0
15 1427927 3 Eq01 2.0
16 1427532 4 Eq01 2.0
17 1427977 5 Eq01 2.0
18 1427980 6 Eq01 2.0
19 1433246 3 Eq01 NaN
20 1433251 4 Eq01 NaN
21 1427585 1 Eq01 3.0
22 1427974 2 Eq01 3.0
23 1427910 3 Eq01 3.0
24 1430905 4 Eq01 3.0
25 1431681 5 Eq01 3.0
26 1432176 6 Eq01 3.0
27 1433005 1 Eq01 NaN
28 1434616 2 Eq01 NaN
29 1433245 4 Eq01 NaN
中间体:
id ciclo equipo m1 group m2 m1&m2 (m1&m2).cumsum() id_nuevo
0 1428171 3 Eq01 True 1 False False 0 NaN
1 1427533 4 Eq01 False 1 False False 0 NaN
2 1427950 5 Eq01 False 1 False False 0 NaN
3 1427956 6 Eq01 False 1 False False 0 NaN
4 1427957 1 Eq01 True 2 True True 1 1.0
5 1427960 2 Eq01 False 2 True False 1 1.0
6 1427913 3 Eq01 False 2 True False 1 1.0
7 1430050 4 Eq01 False 2 True False 1 1.0
8 1431974 5 Eq01 False 2 True False 1 1.0
9 1431534 6 Eq01 False 2 True False 1 1.0
10 1428030 1 Eq01 True 3 False False 1 NaN
11 1428031 2 Eq01 False 3 False False 1 NaN
12 1427930 3 Eq01 False 3 False False 1 NaN
13 1427601 1 Eq01 True 4 True True 2 2.0
14 1427578 2 Eq01 False 4 True False 2 2.0
15 1427927 3 Eq01 False 4 True False 2 2.0
16 1427532 4 Eq01 False 4 True False 2 2.0
17 1427977 5 Eq01 False 4 True False 2 2.0
18 1427980 6 Eq01 False 4 True False 2 2.0
19 1433246 3 Eq01 True 5 False False 2 NaN
20 1433251 4 Eq01 False 5 False False 2 NaN
21 1427585 1 Eq01 True 6 True True 3 3.0
22 1427974 2 Eq01 False 6 True False 3 3.0
23 1427910 3 Eq01 False 6 True False 3 3.0
24 1430905 4 Eq01 False 6 True False 3 3.0
25 1431681 5 Eq01 False 6 True False 3 3.0
26 1432176 6 Eq01 False 6 True False 3 3.0
27 1433005 1 Eq01 True 7 False False 3 NaN
28 1434616 2 Eq01 False 7 False False 3 NaN
29 1433245 4 Eq01 True 8 False False 3 NaN