2016-06-06 3 views
1

Ich habe ein Datenframe wie folgt.Auswählen von Spalten mit Bedingung auf Pandas DataFrame

col1 col2 
0 something1 something1 
1 something2 something3 
2 something1 something1 
3 something2 something3 
4 something1 something2 

Ich versuche, alle Zeilen zu filtern, die something1 entweder auf col1 oder col2 haben. Wenn ich nur die Bedingungslogik für eine Spalte brauche, kann ich es mit df[df.col1 == 'something1'] tun, aber wäre es eine Möglichkeit, dies mit mehreren Spalten zu tun?

Antwort

1

Sie können all mit boolean indexing verwenden:

print ((df == 'something1').all(1)) 
0  True 
1 False 
2  True 
3 False 
4 False 
dtype: bool 

print (df[(df == 'something1').all(1)]) 
     col1  col2 
0 something1 something1 
2 something1 something1 

EDIT:

Wenn nur einige Spalten auswählen müssen Sie isin mit boolean indexing zur Auswahl gewünschten columns und dann subset verwenden können - df[cols]:

print (df) 
     col1  col2 col3 
0 something1 something1 a 
1 something2 something3 s 
2 something1 something1 r 
3 something2 something3 a 
4 something1 something2 a 

cols = df.columns[df.columns.isin(['col1','col2'])] 
print (cols) 
Index(['col1', 'col2'], dtype='object') 

print (df[(df[cols] == 'something1').all(1)]) 
     col1  col2 col3 
0 something1 something1 a 
2 something1 something1 r 
+0

Danke jezrael! Zusätzliche Frage: Wenn ich nach bestimmten Spalten filtern möchte (sagen wir nur in Spalte1 und Spalte2, aber ich habe andere Spalten), wissen Sie, wie es geht? Ich denke, ich muss .all (1) durch etwas anderes ersetzen? – user3368526

+0

hmmm, diese Spalten haben einen gemeinsamen Teil des Spaltennamens? - 'col' für' col1' und 'col2'? – jezrael

+0

Oh zum Beispiel, wenn ich col1, col2 und col3 habe, aber ich möchte nur durch col1 und col2, aber nicht col3. – user3368526