[英]Pandas compare two dataframes and remove what matches in one column
我有两个独立的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
方法?
正如您所问,您可以使用isin
有效地执行此操作(无需借助昂贵的merge
)。
>>> df2[~df2.text.isin(df1.text.values)]
C D text
0 0.5 2 shot
1 0.3 2 shot
编辑:
import numpy as np
mergeddf = pd.merge(df2,df1, how="left")
result = mergeddf[(np.isnan(mergeddf['A']))][['C','D','text']]
您可以合并它们并仅保留具有NaN的行。
df2[pd.merge(df1, df2, how='outer').isnull().any(axis=1)]
或者你可以使用isin
:
df2[~df2.text.isin(df1.text)]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.