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,以防序列未完成

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

到目前为止我还没有成功,我希望有人能帮助我

推荐答案

您可以使用:

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

Python相关问答推荐

Odoo -无法比较使用@api.depends设置计算字段的日期

如何使用Google Gemini API为单个提示生成多个响应?

使用LineConnection动画1D数据

Select 用a和i标签包裹的复选框?

rame中不兼容的d类型

如何使用根据其他值相似的列从列表中获取的中间值填充空NaN数据

为什么默认情况下所有Python类都是可调用的?

如何在python xsModel库中定义一个可选[December]字段,以产生受约束的SON模式

如何过滤包含2个指定子字符串的收件箱列名?

ODE集成中如何终止solve_ivp的无限运行

Python+线程\TrocessPoolExecutor

索引到 torch 张量,沿轴具有可变长度索引

如何指定列数据类型

让函数调用方程

如何将数据帧中的timedelta转换为datetime

根据客户端是否正在传输响应来更改基于Flask的API的行为

如何在Gekko中处理跨矢量优化

如何将泛型类类型与函数返回类型结合使用?

Matplotlib中的曲线箭头样式

极点用特定值替换前n行