2013-02-20 4 views
6

私は2つのサブセットdfs、df_adf_bを選んだデータフレームを持っています。例えばirisデータセットで:Pythonのパンダのインデックスの補集合に基づいて要素を選ぶ

df_a = iris[iris.Name == "Iris-setosa"] 
df_b = iris[iris.Name == "Iris-virginica"] 

df_aにもdf_bでもないirisのすべての要素を取得するための最良の方法は何ですか?私は、df_adf_bを定義した元の条件を参照しないことを好みます。私はちょうどdf_adf_birisの部分集合であると仮定しているので、添え字df_adf_bに基づいてirisから要素を引き出したいと思います。基本的には、それを前提としています

df_a = get_a_subset(iris) 
df_b = get_b_subset(iris) 
# retrieve the subset of iris that 
# has all elements not in df_a or in df_b 
# ... 

EDIT:ここで、非効率的で洗練思えるソリューションであり、私は確信してパンダだと、もっと良い方法があります。

# get subset of iris that is not in a nor in b 
df_rest = iris[map(lambda x: (x not in df_a.index) & (x not in df_b.index), iris.index)] 

2つ目:

df_rest = iris.ix[iris.index - df_a.index - df_b.index] 

これはパンダでどのように最も効率的に/エレガントに行うことができますか?ありがとう。

答えて

10

これは、2番目の解決方法よりも少し速いようです。 .ixでインデックスを作成すると、オーバーヘッドが少し増えます。

df[~df.index.isin(df_a.index+df_b.index)] 
関連する問題