使用OR语句过滤Pandas数据框

130
我有一个pandas数据框,我想根据数据框中两列的值来筛选整个数据框。我希望得到所有IBRD或IMF != 0的行和列。

我有一个 pandas 数据框,想要基于其中两列的值来过滤整个数据框。我需要获取所有满足 IBRD 或 IMF 不等于 0 的行和列。

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

但这会导致ValueError错误。

ValueError:Series的真值是不明确的。请使用a.empty,a.bool(),a.item(),a.any()或a.all()。

所以我知道我没有正确使用or语句,有没有办法解决这个问题?

4个回答

217

1
谢谢,非常有效。我应该早点阅读文档的那一部分。 - Josh
5
6年后,我经常在这里出现......我有一点难过,因为“自然的Python语法”在这种情况下不起作用,我敢打赌这会让人们经常犯错。 - Tommy

6
您可以按照以下方式实现您的结果:
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()

4
这是对所发布问题的回答吗?如果是,为什么你还要解释seaborn呢?此外,请查看如何格式化你的回答 - sacuL

2

请注意,您可以在query方法中使用or|

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

并且

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

两者产生相同的结果。

1

你可以用 | 分隔条件

#像这样

df1 = df[(df['age'] > 25) | (df['gender'] == "男性")]


在其他答案中已经提到了使用 | - Gino Mempin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接