将列中的重复组更改为增量组

2024-05-03 04:34:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下数据帧:

df = pd.DataFrame({'group_nr':[0,0,1,1,1,2,2,3,3,0,0,1,1,2,2,2,3,3]})

print(df)

    group_nr
0          0
1          0
2          1
3          1
4          1
5          2
6          2
7          3
8          3
9          0
10         0
11         1
12         1
13         2
14         2
15         2
16         3
17         3

并希望从重复组号更改为增量组号:

    group_nr  incremental_group_nr
0          0                     0
1          0                     0
2          1                     1
3          1                     1
4          1                     1
5          2                     2
6          2                     2
7          3                     3
8          3                     3
9          0                     4
10         0                     4
11         1                     5
12         1                     5
13         2                     6
14         2                     6
15         2                     6
16         3                     7
17         3                     7

我找不到一种不通过行循环的方法来做这件事。有人知道如何很好地实现这一点吗


Tags: 数据方法dataframedfgroup增量nrpd
2条回答

通过^{}的移位值与不等于^{}的移位值进行比较,然后使用分块1添加累积和:

df['incremental_group_nr'] = df['group_nr'].ne(df['group_nr'].shift()).cumsum() - 1
print(df)
    group_nr  incremental_group_nr
0          0                     0
1          0                     0
2          1                     1
3          1                     1
4          1                     1
5          2                     2
6          2                     2
7          3                     3
8          3                     3
9          0                     4
10         0                     4
11         1                     5
12         1                     5
13         2                     6
14         2                     6
15         2                     6
16         3                     7
17         3                     7

另一个想法是使用bfill来回填shift之后的第一个缺失值:

df['incremental_group_nr'] = df['group_nr'].ne(df['group_nr'].shift().bfill()).cumsum() 
print(df)
    group_nr  incremental_group_nr
0          0                     0
1          0                     0
2          1                     1
3          1                     1
4          1                     1
5          2                     2
6          2                     2
7          3                     3
8          3                     3
9          0                     4
10         0                     4
11         1                     5
12         1                     5
13         2                     6
14         2                     6
15         2                     6
16         3                     7
17         3                     7

您可以检查这些值是否等于以下值,并使用布尔序列的cumsum生成组:

df['incremental_group_nr'] = df.group_nr.ne(df.group_nr.shift()).cumsum().sub(1)

print(df)

    group_nr  incremental_group_nr
0          0                     0
1          0                     0
2          1                     1
3          1                     1
4          1                     1
5          2                     2
6          2                     2
7          3                     3
8          3                     3
9          0                     4
10         0                     4
11         1                     5
12         1                     5
13         2                     6
14         2                     6
15         2                     6
16         3                     7
17         3                     7

相关问题 更多 >