熊猫重新编号独特的事件

时间:2015-06-17 09:44:51

标签: python pandas

给出以下示例:

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

由于

1 个答案:

答案 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