我有两个独立的pandas数据帧(df1
和df2
),它们有多个列,但只有一个是共同的(' text')。
我想找到df2
中df2
和df1
共有的任何行中没有匹配项的每一行。
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
方法?
答案 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)]