web-dev-qa-db-fra.com

Filtrage Pandas Dataframe utilisant OR statement

J'ai un dataframe pandas) et je souhaite filtrer la totalité de la df en fonction de la valeur de deux colonnes du bloc de données. Je souhaite récupérer toutes les lignes et toutes les colonnes où la BIRD ou le FMI! = 0 .

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

mais cela me donne une ValueError

ValueError: la valeur de vérité d'une série est ambiguë. Utilisez a.empty, a.bool (), a.item (), a.any () ou a.all ().

Donc, je sais que je n'utilise pas correctement la déclaration ou, existe-t-il un moyen de le faire?

33
Josh

De la docs:

Une autre opération courante consiste à utiliser des vecteurs booléens pour filtrer les données. Les opérateurs sont: | pour ou, et pour et, et ~ pour ne pas. Ceux-ci doivent être regroupés à l'aide de parenthèses.

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

Essayer:

alldata_balance = alldata[(alldata[IBRD] !=0) | (alldata[IMF] !=0)]
61
Liam Foley

Vous pouvez faire comme ci-dessous pour atteindre votre résultat:

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
....
....
#use filter with plot
#or
fg=sns.factorplot('Retailer country', data=df1[(df1['Retailer country']=='United States') | (df1['Retailer country']=='France')], kind='count')

fg.set_xlabels('Retailer country')
plt.show()


#also
#and
fg=sns.factorplot('Retailer country', data=df1[(df1['Retailer country']=='United States') & (df1['Year']=='2013')], kind='count')

fg.set_xlabels('Retailer country')
plt.show()
1
Majed