generate an id, which fulfills a cycle sequence of another column

Question:

I have the following DataFrame:
*) id: activity identifier
*) cycle: shows the activity of each cycle, following the following sequence 1,2,3,4,5,6 (Starts at 1 and ends at 6)
*) team: team name

GET THE NEW ID
id_nuevo: id that mentions the cycle, in case the sequence is not fulfilled

id ciclo equipo id_nuevo
1428171 3 Eq01 null
1427533 4 Eq01 null
1427950 5 Eq01 null
1427956 6 Eq01 null
1427957 1 Eq01 1
1427960 2 Eq01 1
1427913 3 Eq01 1
1430050 4 Eq01 1
1431974 5 Eq01 1
1431534 6 Eq01 1
1428030 1 Eq01 null
1428031 2 Eq01 null
1427930 3 Eq01 null
1427601 1 Eq01 2
1427578 2 Eq01 2
1427927 3 Eq01 2
1427532 4 Eq01 2
1427977 5 Eq01 2
1427980 6 Eq01 2
1433246 3 Eq01 null
1433251 4 Eq01 null
1427585 1 Eq01 3
1427974 2 Eq01 3
1427910 3 Eq01 3
1430905 4 Eq01 3
1431681 5 Eq01 3
1432176 6 Eq01 3
1433005 1 Eq01 null
1434616 2 Eq01 null
1433245 4 Eq01 null

So far I have not been successful, I hope someone can help me

Answers:

You can use:

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)

Output:

         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

Intermediates:

         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
Answered By: mozway
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.