2015-04-05 23 views
9

Ho un dataframe panda e voglio filtrare l'intero df in base al valore di due colonne nel frame di dati. Voglio tornare tutte le righe e colonne in cui BIRS o del FMI! = 0.Filtraggio dei panda Dataframe utilizzando l'istruzione OR

alldata_balance = alldata[(alldata[IBRD] !=0) or (alldata[IMF] !=0)] 

ma questo mi dà un ValueError

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(),  a.item(), a.any() or a.all(). 

Quindi so che non sto usando la dichiarazione o correttamente, è c'è un modo per farlo?

risposta

17

Dalla documentazione:

Un'altra operazione comune è l'uso di vettori booleani per filtrare i dati . Gli operatori sono: | per o, & per e, e ~ per non. Questi devono essere raggruppati usando parentesi.

http://pandas.pydata.org/pandas-docs/version/0.15.2/indexing.html#boolean-indexing

Prova:

alldata_balance = alldata[(alldata[IBRD] !=0) | (alldata[IMF] !=0)] 
+0

Grazie, che funzionava benissimo. Avrei dovuto leggere quella parte dei documenti. – Josh

Problemi correlati