2013-02-20 13 views
6

İki alt kümeyi dfs, df_a ve df_b seçtiğim bir veri çerçevem ​​var.Python pandas'daki dizinlerin tamamlayıcısı temel alınarak öğeleri seçme

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

df_a ne de df_b yılında uğramamış iris tüm unsurları almak için en iyi yolu nedir: iris veri kümesindeki Örneğin? df_a ve df_b tanımlanmış özgün koşullara başvurmuyorum. Sadece df_a ve df_b'un iris alt kümeleri olduğunu varsayalım, bu nedenleve df_b dizinlerine dayanarak iris öğelerinden öğe çekmek istiyorum.

# 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)] 

Ve ikincisi:

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 
# ... 

DÜZENLEME: daha iyi bir yol vardır burada verimsiz ve inelegant görünen bir çözümdür ve emin panda değilim Temel olarak, farz

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

Bu, pandalarda en verimli/zarif bir şekilde nasıl yapılabilir? Teşekkürler.

cevap

10

Bu, ikinci çözümünüzden biraz daha hızlı görünüyor. .ix:

df[~df.index.isin(df_a.index+df_b.index)] 
ile dizin oluştururken biraz daha fazla yük vardır
İlgili konular