2016-06-29 15 views
16

Supponiamo che ho un dataframe con i paesi che va come:Pandas: convertire categorie per i numeri

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

So che c'è un pd.get_dummies funzione per convertire i paesi a 'codifiche one-hot'. Tuttavia, desidero convertirli in indici, in modo tale che ottenga invece cc_index = [1,2,1,3].

sto supponendo che ci sia un modo più veloce rispetto all'utilizzo dei get_dummies insieme a un NumPy clausola where come illustrato di seguito:

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

Questo è un po 'più facile da fare in R mediante 'fattori' in modo Spero che i panda abbiano qualcosa di simile.

+0

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

+0

sicuro, ho dimenticato l'indice python 0 –

+0

La serie categoriale o le colonne in un DataFrame possono aiutare. – min2bro

risposta

44

In primo luogo, cambiare il tipo di colonna:

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

Ora i dati sembrano simili, ma sono memorizzati categoricamente. Per catturare i codici di categoria:

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

Ora avete:

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

Se non si desidera modificare il vostro dataframe ma semplicemente ottenere i codici:

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

Oppure utilizzare il colonna categoriale come indice:

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