2014-07-10 49 views
5

sto cercando di escludere righe da una dataframe, che si verificano anche in un'altra dataframe:Come filtrare le righe di un python pita il dataframe da un altro dataframe confrontando le colonne?

import pandas 

df = pandas.DataFrame({'A': ['Chr1', 'Chr1', 'Chr1','Chr1', 'Chr1', 'Chr1','Chr2','Chr2'], 'B': [10,20,30,40,50,60,15,20]}) 

errors = pandas.DataFrame({'A': ['Chr1', 'Chr1'], 'B': [20,50]}) 

Di conseguenza, le righe df, che sono uguali a errori devono essere lasciati fuori:

df: 
'A' 'B' 
Chr1 10 
Chr1 30 
Chr1 40 
Chr1 60 
Chr2 15 
Chr2 20 

Non sembra funzionare con df.merge e non voglio scorrere tutte le righe, poiché i datafram diventano piuttosto grandi.

migliore,

David

risposta

6

Aggiungi una colonna in più per gli errori

errors['temp'] = 1 

Unire i due dataframes

merged_df = pandas.merge(df,errors,how='outer') 

Ora tenere solo le righe che hanno 'temp' come NaN

merged_df = merged_df[ merged_df['temp'] != 1 ] 
del merged_df['temp'] 

print merged_rdf 

     A B 
0 Chr1 10 
2 Chr1 30 
3 Chr1 40 
5 Chr1 60 
6 Chr2 15 
7 Chr2 20 
4

Per due colonne che si può fare:

print df[ ~df['A'].isin(errors['A']) | ~df['B'].isin(errors['B']) ] 
Problemi correlati