2014-09-17 3 views

risposta

15

Si può provare questo:

import pandas as pd 
df = pd.DataFrame({ 
     'A': [1, 2, 3, 4, 5], 
     'B': ['G', 'X', 'F', 'Z', 'I'] 
    }) 
df.ix[df.B.isin(['X','Y','Z']), 'A'] = 'T' 
print df 

uscita:

A B 
0 1 G 
1 T X 
2 3 F 
3 T Z 
4 5 I 

Ricordate di usare ix o loc per evitare di impostare i valori su una fetta copiato.

5

Usa isin e loc per impostare il valore:

In [138]: 

df.loc[df.B.isin(['X','Y','Z']),'A']='T' 
df 
Out[138]: 
    A B 
0 1 G 
1 T X 
2 3 F 
3 T Z 
4 5 I 

È inoltre possibile utilizzare np.where:

In [140]: 

df['A'] = np.where(df.B.isin(['X','Y','Z']),'T', df['A']) 
df 
Out[140]: 
    A B 
0 1 G 
1 T X 
2 3 F 
3 T Z 
4 5 I 
+0

Credo che la vostra utilizzando ipython. Ti capita di conoscere le differenze temporali tra questi? –

+0

@ user765015 utilizzando loc su questo esempio di giocattolo ha preso 915 us, utilizzando dove ha preso 615us, quindi in questo caso è il 30% più veloce – EdChum

+1

@ user765015 per un 505 row df loc è leggermente più veloce 9.27 ms vs 11.2 ms – EdChum