web-dev-qa-db-ja.com

フィルタリングPandas= Dataframe using ORステートメント

pandasデータフレームがあり、データフレームの2列の値に基づいて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ステートメントを正しく使用していないことを知っていますが、これを行う方法はありますか?

33
Josh

ドキュメントから:

もう1つの一般的な操作は、ブールベクトルを使用してデータをフィルター処理することです。演算子は次のとおりです。 for or、&for and、および〜for not。これらは、括弧を使用してグループ化する必要があります。

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

試してください:

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

次のようにして結果を得ることができます:

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