给出以下示例:
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
由于
答案 0 :(得分:2)
一种方法是创建一个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
修改强>
实际上,更好的方法是在列上调用rank
并传递参数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