如何找出数据框中的行是否已存在于单独的数据框中?

时间:2019-02-28 16:46:07

标签: python pandas dataframe

我很难找到答案。这是我想发生的事的一个例子

print df

  A | B
0 1   1
1 2   2
2 3   3

打印df_2

  A | B
0 1   1
1 2   2

我希望它仅返回df_2中不重复的行,如下所示-

  A | B
2 3   3

2 个答案:

答案 0 :(得分:2)

因此,您可以将df.isin()与反向布尔掩码一起使用:

df1[~df1.isin(df2)]

位置:

print(~df1.isin(df2))

      A      B
0  False  False
1  False  False
2   True   True

答案 1 :(得分:0)

该问题并未阐明比较是否需要按元素进行或整个数据框架进行比较。如果存在匹配的行,但索引未对齐,则使用isin()进行比较将得出错误的结果。

df

    A   B
0   3   3
1   1   1
2   2   2

df2

    A   B
0   1   1
1   2   2

使用“外部”与指示器合并以查找左侧数据框中存在的行,

diff = df.merge(df2, indicator=True, how='outer')
diff.loc[diff['_merge'] == 'left_only', df.columns]

    A   B
0   3   3

使用isin的解决方案将返回,

    A   B
0   3   3
1   1   1
2   2   2

编辑:回答后续问题。如果其中一个数据框中的日期列是对象,则首先使用

将其转换为日期时间
df['date'] = pd.to_datetime(df['date'])