使用 OR 语句过滤熊猫数据帧

我有一个熊猫数据框架,我想根据数据框架中两列的值过滤整个 df。我想回到所有的行和列国际复兴开发银行或国际货币基金组织!= 0.

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

但这给了我一个 ValueError

ValueError: Series 的真值不明确, A.bool ()、 a.item ()、 a.any ()或 a.all ()。

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

241910 次浏览

来自文件:

另一个常见的操作是使用布尔向量来过滤 操作符是: | for 或、 & for 和 ~ for not 必须使用括号分组。

Https://pandas.pydata.org/docs/user_guide/indexing.html#boolean-indexing

Try:

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

你可以这样做,以达到你的结果:

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

只是想说明一下,你可以在 query方法中同时使用 or|:

alldata.query('IBRD!=0 or IMF!=0')

还有

alldata.query('IBRD!=0 | IMF!=0')

都会产生同样的结果。