Pandas重新编号唯一的事件

2024-04-26 21:06:08 发布

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

给出以下示例:

import pandas as pd
data = pd.DataFrame({'ID' : [1, 1, 2, 4, 4, 4, 4, 4, 11, 11, 16, 17, 17, 19]})

>>> data
    ID
0    1
1    1
2    2
3    4
4    4
5    4
6    4
7    4
8   11
9   11
10  16
11  17
12  17
13  19

如何简单地将这些值重新编号为数据帧中的一列,以便它们是连续的,即数据的输出是:

>>> data
    ID
0    1
1    1
2    2
3    3
4    3
5    3
6    3
7    3
8    4
9    4
10   5
11   6
12   6
13   7

谢谢


Tags: 数据importid示例dataframepandasdataas
1条回答
网友
1楼 · 发布于 2024-04-26 21:06:08

一种方法是创建一个dict,将ID列中的unique值映射到新的顺序值,然后调用map传入这个dict:

In [48]:
d = dict(zip(data['ID'].unique(), np.arange(1, len(data['ID'].unique()) + 1)))
d

Out[48]:
{1: 1, 2: 2, 4: 3, 11: 4, 16: 5, 17: 6, 19: 7}

In [49]:
data['ID'] = data['ID'].map(d)
data

Out[49]:
    ID
0    1
1    1
2    2
3    3
4    3
5    3
6    3
7    3
8    4
9    4
10   5
11   6
12   6
13   7

编辑

实际上,更好的方法是对列调用^{},并传递param dense

In [56]:

data['ID'] = data['ID'].rank('dense')
data
Out[56]:
    ID
0    1
1    1
2    2
3    3
4    3
5    3
6    3
7    3
8    4
9    4
10   5
11   6
12   6
13   7

相关问题 更多 >