2015-06-17 78 views
1

考慮下面的例子:大熊貓重新編號唯一出現

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 

感謝

回答

2

一種方法是創建一個字典在你的ID列中的值unique映射到新的順序值,然後調用map通過在這個字典:

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並通過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 
+0

完美,第二個解決方案是非常優雅的感謝! –