2017-08-27 1 views
1

Ich habe folgende Daten in meiner Spalte von Datenrahmen. Wie kann ich jeden Domainnamen nach digitaler Nummer umwandeln? Ich versuche zu ersetzen in einer for-Schleife. Jedoch, da ich mehr als 1200 unqie Domain Name habe. Ich will nicht zu Es scheint, wie es kein Gedanke Weise ist eskonvertieren Datenrahmen Spalten Wert in digitale Nummer

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

zu tun, aber es nicht

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 
.... 

ich nicht arbeiten will

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 
.... 

Antwort

5

des pd.factorize verwenden lassen:

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

Ausgabe:

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

Nice one :-) ~ 1 – Wen

1

Wenn es konvertieren wirklich wichtig für die digitale Nummernvergabe, können Sie versuchen, diese

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 

Wenn die Materie ist, können Sie versuchen

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 
Verwandte Themen