2015-12-22 19 views
8

Tôi có hai khung dữ liệu gấu trúc riêng biệt (df1df2) có nhiều cột, nhưng chỉ có một cột chung ('văn bản').Pandas so sánh hai dataframes và loại bỏ những gì phù hợp trong một cột

Tôi muốn tìm mọi hàng trong df2 không khớp với bất kỳ hàng nào trong cột mà df2df1 có điểm chung.

df1

A B text 
45 2 score 
33 5 miss 
20 1 score 

df2

C D text 
.5 2 shot 
.3 2 shot 
.3 1 miss 

Kết quả df (loại bỏ hàng chứa bỏ lỡ vì nó xảy ra trong df1)

C D text 
.5 2 shot 
.3 2 shot 

Có thể sử dụng phương pháp isin trong này kịch bản?

Trả lời

8

Như bạn đã hỏi, bạn có thể thực hiện điều này một cách hiệu quả bằng cách sử dụng isin (mà không cần phải tốn kém đến merge s).

>>> df2[~df2.text.isin(df1.text.values)] 
C D text 
0 0.5 2 shot 
1 0.3 2 shot 
+0

Đây là những gì xuất hiện trong đầu chỉ đọc tiêu đề –

1

EDIT:

import numpy as np 

mergeddf = pd.merge(df2,df1, how="left") 

result = mergeddf[(np.isnan(mergeddf['A']))][['C','D','text']] 
1

Bạn có thể kết hợp chúng và giữ chỉ các dòng có một NaN.

df2[pd.merge(df1, df2, how='outer').isnull().any(axis=1)] 

hoặc bạn có thể sử dụng isin:

df2[~df2.text.isin(df1.text)] 
Các vấn đề liên quan