2013-06-15 15 views
15

Nach Berechnungen auf einer gesamten Pandas Datenrahmen durchführt, muss ich zurück gehen und variable Berechnungen außer Kraft setzen (oft auf Null), basierend auf dem Wert einer anderen Variable (n). Gibt es einen prägnanten/idiomatischen Weg, um diese Art von Operation auszuführen?Python/Pandas Idiom für if/then/else

df['var1000'][df['type']==7] = 0 
df['var1001'][df['type']==7] = 0 
df['var1002'][df['type']==7] = 0 
... 
df['var1099'][df['type']==7] = 0 

Gibt es eine pandas-y Weise, etwas so zu tun?

if (df['type']==7): 
    df['var1000'] = 0 
    df['var1001'] = 0 
    df['var1002'] = 0 
    ... 
    df['var1099'] = 0 

Antwort

22
df.ix[df.type==7, ['var1001', 'var1002']] = 0 

Wenn Sie es auf alle Spalten tun, können Sie tun df.ix[df.type==7] = 0 gerade. Oder natürlich, wenn Sie eine Liste der Spalten, deren Werte haben Sie ersetzen möchten, können Sie diese Liste in den zweiten Schlitz passieren:

columnsToReplace = ['var1001', 'var1002', ...] 
df.ix[df.type==8, columnsToReplace] = 0 
+6

Und verwenden: 'var10_cols = [col col für in df.columns wenn isinstance (col, basestring) und col.startswith ('var10')] ' –

+1

Nice! Kam hier aus dem Kochbuch! – MYGz