2013-02-20 46 views
6

में सूचकांक के पूरक के आधार पर तत्वों को चुनना मेरे पास एक डेटाफ्रेम है जिसमें से मैं दो सबसेट डीएफएस, df_a और df_b चुनता हूं।पायथन पांडा

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

सबसे अच्छा तरीका है iris कि df_a में है और न ही df_b में न तो कर रहे हैं के सभी तत्वों को प्राप्त करने के लिए क्या है: iris डेटासेट में उदाहरण के लिए? मैं उन मूल स्थितियों को संदर्भित करना पसंद नहीं करता जो df_a और df_b परिभाषित करते हैं। मुझे लगता है कि df_a और df_biris के उप-समूह हैं, इसलिए मैं iris से df_a और df_b के सूचकांक के आधार पर तत्वों को खींचना चाहता हूं। मूल रूप से, मान लेते हैं कि:

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

संपादित करें:

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

और एक दूसरा:

यहाँ
एक समाधान है कि अकुशल और असजीला लगता है एक बेहतर तरीका है और मुझे यकीन है कि पांडा कर रहा हूँ है
df_rest = iris.ix[iris.index - df_a.index - df_b.index] 

इसे पांडा में सबसे कुशलतापूर्वक/सुंदर तरीके से कैसे किया जा सकता है? धन्यवाद।

उत्तर

10

यह आपके दूसरे समाधान की तुलना में थोड़ा तेज़ लगता है। .ix के साथ अनुक्रमण करते समय थोड़ा अधिक ओवरहेड होता है:

df[~df.index.isin(df_a.index+df_b.index)]