首页 > 解决方案 > 如果我有两个数据框,其中一个是其他数据框的子集,如何完全删除公共行?

问题描述

我已经寻找过这类问题,但他们都没有真正回答我的问题。

假设我有两个数据框,并且它们的索引不一致。df2是 的子集,df1我想删除df1中存在的所有行df2

我已经尝试了以下方法,但它没有给我我正在寻找的结果。

df1[~df1.index.isin(df2.index)]

不幸的是,我无法与您分享原始数据,但是,两个数据框中的列数为 14。

这是我正在寻找的示例:

df1 = 

   month  year  sale
0      1  2012    55
1      4  2014    40
2      7  2013    84
3     10  2014    31
df2 = 
   month  year  sale
0      1  2012    55
1     10  2014    31

我正在寻找:

df = 

   month  year  sale
0      4  2014    40
1      7  2013    84

标签: pythonpandasdataframe

解决方案


使用左连接 byDataFrame.merge和参数,然后比较( ) 的indicator新列并按 过滤:Series.eq==boolean indexing

df = df1[df1.merge(df2, indicator=True, how='left')['_merge'].eq('left_only')]
print (df)
   month  year  sale
1      4  2014    40
2      7  2013    84

推荐阅读