使用OR语句过滤Pandas Dataframe

时间:2015-04-05 19:13:57

标签: python pandas filter dataframe

我有一个pandas数据帧,我想根据数据框中两列的值过滤整个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()。

所以我知道我没有正确使用或声明,有没有办法做到这一点?

2 个答案:

答案 0 :(得分:54)

来自文档:

  

另一个常见的操作是使用布尔向量来过滤   数据。运营商是:| for or,&为和,和〜为没有。这些   必须使用括号进行分组。

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

尝试:

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

答案 1 :(得分:1)

您可以通过以下操作来达到目的:

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