2016-06-29 14 views
16

Angenommen, ich habe einen Datenrahmen mit Ländern, die wie das geht:Pandas: convert Kategorien Zahlen

cc | temp 
US | 37.0 
CA | 12.0 
US | 35.0 
AU | 20.0 

Ich weiß, dass es eine pd.get_dummies funktioniert die Länder zu ‚One-Hot-Kodierungen‘ zu konvertieren. Allerdings möchte ich sie stattdessen in Indizes konvertieren, so dass ich stattdessen cc_index = [1,2,1,3] bekomme.

Ich gehe davon aus, dass es einen schnelleren Weg, um die get_dummies zusammen mit einem numpy als die Verwendung von where-Klausel wie folgt:

[np.where(x) for x in df.cc.get_dummies().values]

Dies ist etwas leichter in R zu tun, mit ‚Faktoren‘ Ich hoffe, dass Pandas etwas Ähnliches hat.

+0

meinen Sie 'cc_ind ex = [0,1,0,2] '? –

+0

sicher, vergaß über den Python 0 Index –

+0

Categorical Series oder Spalten in einem DataFrame kann helfen. – min2bro

Antwort

44

zunächst den Typ der Spalte ändern:

df.cc = pd.Categorical(df.cc) 

Nun werden die Daten ähnlich aussehen, sind aber kategorisch gespeichert. Um die Kategoriecodes zu erfassen:

df['code'] = df.cc.cat.codes 

Jetzt haben Sie:

cc temp code 
0 US 37.0  2 
1 CA 12.0  1 
2 US 35.0  2 
3 AU 20.0  0 

Wenn Sie nicht möchten, dass Ihre Datenrahmen ändern, sondern einfach die Codes erhalten:

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

Oder nutzen Sie die kategorische Spalte als Index:

df2 = pd.DataFrame(df.temp) 
df2.index = pd.CategoricalIndex(df.cc) 
Verwandte Themen