2014-07-10 29 views
5

Tôi đang cố gắng để loại trừ các hàng từ một dataframe, mà cũng xảy ra ở dataframe khác:Làm cách nào để lọc ra các hàng của một khung dữ liệu pandas python từ một khung dữ liệu khác bằng cách so sánh các cột?

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

Kết quả là, các hàng trong df, đó là tương đương với lỗi nên bỏ qua:

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

Dường như nó không hoạt động với df.merge và tôi không muốn lặp qua tất cả các hàng vì các khung dữ liệu trở nên khá lớn.

nhất,

David

Trả lời

6

Thêm một cột phụ để lỗi

errors['temp'] = 1 

Merge hai dataframes

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

Bây giờ hãy chỉ những hàng mà có 'tạm thời' như 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

Đối với hai cột bạn có thể làm:

print df[ ~df['A'].isin(errors['A']) | ~df['B'].isin(errors['B']) ] 
Các vấn đề liên quan