2015-12-22 139 views
8

我有兩個獨立的熊貓數據幀(df1df2),它們有多列,但只有一列是共同的('文本')。熊貓比較兩個數據幀並刪除一列中匹配的內容

我想找df2中的每一行,在df2df1有共同的列的任何行中沒有匹配。

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 

結果DF(因爲它在DF1發生除去含有未命中行)

C D text 
.5 2 shot 
.3 2 shot 

是否有可能使用isin方法在此場景?

回答

8

正如您所問,您可以使用isin(無需使用昂貴的merge s)高效地完成此操作。

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

這就是浮現在腦海,光看標題 –

1

編輯:

import numpy as np 

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

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

您可以將它們合併,只保留有一楠線。

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

,或者您可以使用isin

df2[~df2.text.isin(df1.text)] 
相關問題