2017-08-27 52 views
1

我在數據框的列中有以下數據。如何通過數字號碼轉換每個域名?我嘗試在for循環中使用replace。但是,因爲我有超過1200個unqie域名。我不想現在看來似乎不是一個主意辦法做到這一點將數據幀列值轉換爲數字編號

for i, v in np.ndenumerate(np.unique(df['domain'])): 
    df['domain'] = df['domain'].replace(to_replace=[v], value=i[0]+1, inplace=True) 

,但它不工作

data frame: 
    type domain 
0 1  yahoo.com 
1 1  google.com 
2 0  google.com 
3 0  aa.com 
4 0  google.com 
5 0  aa.com 
6 1  abc.com 
7 1  msn.com 
8 1  abc.com 
9 1  abc.com 
.... 

我要轉換爲

type domain 
0 1  1 
1 1  2 
2 0  2 
3 0  3 
4 0  2 
5 0  3 
6 1  4 
7 1  5 
8 1  4 
9 1  4 
.... 

回答

5

讓我們使用pd.factorize

df.assign(domain=pd.factorize(df.domain)[0]+1) 

輸出:

type domain 
0  1  1 
1  1  2 
2  0  2 
3  0  3 
4  0  2 
5  0  3 
6  1  4 
7  1  5 
8  1  4 
9  1  4 
+2

尼斯一個:-)〜+1 – Wen

1

如果對於數字號碼分配真的很重要,你可以試試這個

import pandas as pd 

df.domain.astype('category').cat.codes 

Out[154]: 
0 4 
1 2 
2 2 
3 0 
4 2 
5 0 
6 1 
7 3 
8 1 
9 1 
dtype: int8 

如果是這樣的事情,你可以嘗試

maplist=df[['domain']].drop_duplicates(keep='first').reset_index(drop=True).reset_index().set_index('domain') 
maplist['index']=maplist['index']+1 
df.domain=df.domain.map(maplist['index']) 
    Out[177]: 
    type domain 
0  1  1 
1  1  2 
2  0  2 
3  0  3 
4  0  2 
5  0  3 
6  1  4 
7  1  5 
8  1  4 
9  1  4