Фильтрация Pandas Dataframe с использованием оператора OR

У меня есть pandas dataframe, и я хочу отфильтровать весь df на основе значения двух столбцов во фрейме данных. Я хочу вернуть все строки и столбцы, где IBRD или IMF! = 0.

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

но это дает мне ValueError

ValueError: Значение истинности Серии неоднозначно. Используйте a.empty, a.bool(), a.item(), a.any() или a.all().

Итак, я знаю, что не правильно использую оператор or, есть ли способ сделать это?

Ответ 1

Из документов:

Другая распространенная операция - использование булевых векторов для фильтрации данные. Операторы: | для или, и для и, и ~ для нет. Эти должны быть сгруппированы с помощью круглых скобок.

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

Try:

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

Ответ 2

Вы можете сделать как ниже, чтобы достичь своего результата:

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