Pandas比较两个数据帧并删除一列中的匹配项

时间:2015-12-22 14:21:28

标签: python pandas

我有两个独立的pandas数据帧(df1df2),它们有多个列,但只有一个是共同的(' text')。

我想找到df2df2df1共有的任何行中没有匹配项的每一行。

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方法?

3 个答案:

答案 0 :(得分:25)

正如您所问,您可以使用isin有效地执行此操作(无需使用昂贵的merge)。

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

答案 1 :(得分:1)

编辑:

import numpy as np

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

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

答案 2 :(得分:1)

您可以合并它们并仅保留具有NaN的行。

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

或者您可以使用isin

df2[~df2.text.isin(df1.text)]