2013-08-12 18 views
6

DomandaCrea Colonna con ELIF in Panda

Sto avendo difficoltà a capire come creare nuova colonna dataframe in base ai valori di altre due colonne. Devo usare se/elif/else. Ma tutta la documentazione e gli esempi che ho trovato mostrano solo se la logica/else. Ecco un esempio di quello che sto cercando di fare:

Codice

df['combo'] = 'mobile' if (df['mobile'] == 'mobile') elif (df['tablet'] =='tablet') 'tablet' else 'other') 

Sono aperto ad usare dove() anche. Sto avendo problemi a trovare la sintassi giusta.

risposta

17

Nei casi in cui sono presenti più istruzioni di diramazione, è preferibile creare una funzione che accetti una riga e quindi applicarla lungo lo axis=1. Questo di solito è molto più veloce dell'iterazione attraverso le righe.

def func(row): 
    if row['mobile'] == 'mobile': 
     return 'mobile' 
    elif row['tablet'] =='tablet': 
     return 'tablet' 
    else: 
     return 'other' 

df['combo'] = df.apply(func, axis=1) 
+0

Ha funzionato perfettamente. Grazie! – DJElbow

15

Ho provato quanto segue e il risultato è stato molto più veloce. Spero che sia utile per gli altri.

df['combo'] = 'other' 
df.loc[df['mobile'] == 'mobile', 'combo'] = 'mobile' 
df.loc[df['tablet'] == 'tablet', 'combo'] = 'tablet' 
+1

Questo è il metodo consigliato nel ricettario pandas. http://pandas.pydata.org/pandas-docs/stable/cookbook.html#idioms –

+0

'.ix()' è ufficialmente deprecato. Sto aggiornando questa risposta con la soluzione attuale del libro di cucina. – EOL

Problemi correlati