繁体   English   中英

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

[英]Pandas compare two dataframes and remove what matches in one column

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

我想在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方法?

正如您所问,您可以使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM