2016-01-11 13 views
6

Sto cercando di estrarre le righe da un df in base a più condizioni, TUTTE le condizioni devono essere soddisfatte prima che qualsiasi riga venga selezionata altrimenti nulla.ottiene sottosezione di df in base a più condizioni

mio 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 

mie condizioni che devono essere nel seguente formato:

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

uscita prevista:

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

Stai chiedendo come combinare le condizioni (ad es. 'df [df.is_net & df.is_pct & ...]'? O stai chiedendo come trovare le righe in cui tutto il numero arbitrario di colonne booleane è True? –

+0

dove il numero arbitario delle colonne di booleani corrisponde alla variabile "condizioni" –

+1

A parte: poiché i booleani sono un tipo supportato nativamente, l'uso di * string * True e False causerà confusione perché 'True! = 'True''. – DSM

risposta

6

Credo che il trucco è quello di rendere conditions in una serie :

>>> 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

Questa è una buona idea. Ma cosa succede se non TUTTE le condizioni sono soddisfatte? –

+0

Non sono sicuro di cosa stai chiedendo. Se non TUTTE le condizioni sono soddisfatte, come in 'a',' b' e 'c', allora il metodo' all' restituisce False per quell'indice. – DSM

+0

Ignora me, ero un nweb. Grazie ancora! –

Problemi correlati