2015-07-20 34 views
31

Ho un semplice dataframe come il seguente:Pandas dataframe: sostituire tutti i valori in una colonna, in base alla condizione

Pandas DataFrame

voglio selezionare tutti i valori dalla colonna 'prima stagione' e sostituire quelle che sono oltre il 1990 per 1. In questo esempio, solo i Baltimore Ravens avrebbero sostituito il 1996 con 1 (mantenendo intatto il resto dei dati).

ho usato il seguente:

df.loc[(df['First Season'] > 1990)] = 1 

Ma, sostituisce tutti i valori in quella riga da 1, e non solo i valori nella colonna 'prima stagione'.

Come posso sostituire solo i valori da quella colonna?

risposta

55

è necessario selezionare quella colonna:

In [41]: 
df.loc[df['First Season'] > 1990, 'First Season'] = 1 
df 

Out[41]: 
       Team First Season Total Games 
0  Dallas Cowboys   1960   894 
1  Chicago Bears   1920   1357 
2 Green Bay Packers   1921   1339 
3  Miami Dolphins   1966   792 
4 Baltimore Ravens    1   326 
5 San Franciso 49ers   1950   1003 

Quindi, la sintassi è:

df.loc[<mask>(here mask is generating the labels to index) , <optional column(s)> ] 

È possibile controllare il docs e anche il 10 minutes to pandas che mostra la semantica

EDIT

Se si desidera generare un indicatore booleano allora si può solo usare la condizione booleana per generare una serie booleano e il cast del DTYPE a int questo convertirà True e False-1 e 0 rispettivamente:

In [43]: 
df['First Season'] = (df['First Season'] > 1990).astype(int) 
df 

Out[43]: 
       Team First Season Total Games 
0  Dallas Cowboys    0   894 
1  Chicago Bears    0   1357 
2 Green Bay Packers    0   1339 
3  Miami Dolphins    0   792 
4 Baltimore Ravens    1   326 
5 San Franciso 49ers    0   1003 
+0

lavorato grande! Non è possibile imporre trasformazioni multiple? 'df.loc [df ['Prima stagione']> 1990, 'Prima stagione'] = 1 df.loc [df ['Prima stagione'] <1990, 'Prima stagione'] = 0' rende tutti i valori in quella colonna restituisce 0 – ichimok

+0

Puoi usare un trucco 'df ['Prima stagione'] = (df ['Prima stagione']> 1990) .astype (int)' questo crea una serie booleana e il cast per int converte 'True' e 'False' a' 1' e '0' rispettivamente – EdChum

+0

astype (int) è più Pandorable! Buona risposta. – mythicalcoder

Problemi correlati