2015-12-22 107 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)] 
相关问题