2013-02-20 9 views
6

Ho un dataframe dal quale seleziono due sottoinsieme dfs, df_a e df_b. Per esempio in iris set di dati:selezionare elementi basati sul complemento degli indici nei panda Python

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

Qual è il modo migliore per ottenere tutti gli elementi di iris che non sono né in df_adf_b? Preferisco non fare riferimento alle condizioni originali che hanno definito df_a e df_b. Immagino solo che df_a e df_b siano sottoinsiemi di iris, quindi mi piacerebbe estrarre elementi da iris in base agli indici di df_a e df_b. In sostanza, si supponga che:

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: ecco una soluzione che sembra inefficiente e poco elegante e sono sicuro che i panda ha un modo migliore:

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

E un secondo:

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

come può essere fatto in modo più efficiente/elegante nei panda? Grazie.

risposta

10

Questo sembra un po 'più veloce della tua seconda soluzione. C'è un po 'più di overhead durante l'indicizzazione con .ix:

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