我很难找到答案。这是我想发生的事的一个例子
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
答案 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'])