2016-01-11 15 views
6

Ich versuche, Zeilen aus einem df basierend auf mehreren Bedingungen zu extrahieren, müssen alle Bedingungen erfüllt sein, bevor irgendwelche Zeilen ausgewählt werden, sonst nichts.Get Unterabschnitt von df basierend auf mehreren Bedingungen

Mein df

columns = ['is_net', 'is_pct', 'is_mean', 'is_wgted', 'is_sum'] 
index = ['a','b','c','d'] 
data = [['True','True','False','False', 'False'], 
     ['True','True','True','False', 'False'], 
     ['True','True','False','False', 'True'], 
     ['True','True','False','True', 'False']] 

df = pd.DataFrame(columns=columns, index=index, data=data) 
df 

    is_net is_pct is_mean is_wgted is_sum 
a True True False False False 
b True True True False False 
c True True False False True 
d True True False True False 

Meine Bedingungen, die in diesem Format vorliegen:

conditions = {'is_net': 'True', 
       'is_pct': 'True', 
       'is_mean': 'False', 
       'is_wgted': 'True', 
       'is_sum': 'False'} 

Erwartete Ausgabe:

is_net is_pct is_mean is_wgted is_sum 
d True True False True False 
+0

Fragen Sie, wie man Bedingungen kombiniert (z.B. 'df [df.is_net & df.is_pct & ...]'? Oder fragen Sie sich, wie Sie Zeilen finden, in denen alle beliebig vielen booleschen Spalten True sind? –

+0

wo die ganze Anzahl boolescher Spalten mit der Variablen 'conditions' übereinstimmt –

+1

Beiseite: Da Booleans ein nativ unterstützter Typ sind, wird die Verwendung von * string * True und False zu Verwirrung führen, weil 'True! = 'True''. – DSM

Antwort

6

Ich denke, der Trick conditions in eine Reihe zu machen ist :

>>> pd.Series(conditions) 
is_mean  False 
is_net  True 
is_pct  True 
is_sum  False 
is_wgted  True 
dtype: object 
>>> (df == pd.Series(conditions)) 
    is_mean is_net is_pct is_sum is_wgted 
a True True True True False 
b False True True True False 
c True True True False False 
d True True True True  True 
>>> (df == pd.Series(conditions)).all(axis=1) 
a False 
b False 
c False 
d  True 
dtype: bool 
>>> df[(df == pd.Series(conditions)).all(axis=1)] 
    is_net is_pct is_mean is_wgted is_sum 
d True True False  True False 
+0

Das ist eine gute Idee. Aber was passiert, wenn nicht alle Bedingungen erfüllt sind? –

+0

Ich bin mir nicht sicher, was du fragst. Wenn nicht ALLE Bedingungen erfüllt sind, wie in "a", "b" und "c", dann gibt die "all" -Methode False für diesen Index zurück. – DSM

+0

Ignorier mich, ich war ein Nweb. Danke noch einmal! –