Python-pandas获取不在其他数据框中的行

发布于 2021-02-02 23:20:08

我有两个pandas数据框,它们有一些共同点。

假设dataframe2dataframe1的子集。

如何获取dataframe1中不在dataframe2中的行?

df1 = pandas.DataFrame(data = {'col1' : [1, 2, 3, 4, 5], 'col2' : [10, 11, 12, 13, 14]}) 
df2 = pandas.DataFrame(data = {'col1' : [1, 2, 3], 'col2' : [10, 11, 12]})
关注者
0
被浏览
144
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    一种方法是存储两个df的内部合并结果,然后我们可以简单地在一行的值不在此通用值中时选择行:

    In [119]:
    
    common = df1.merge(df2,on=['col1','col2'])
    print(common)
    df1[(~df1.col1.isin(common.col1))&(~df1.col2.isin(common.col2))]
       col1  col2
    0     1    10
    1     2    11
    2     3    12
    Out[119]:
       col1  col2
    3     4    13
    4     5    14
    

    编辑

    你发现的另一种方法是使用isin它将产生NaN可删除的行:

    In [138]:
    
    df1[~df1.isin(df2)].dropna()
    Out[138]:
       col1  col2
    3     4    13
    4     5    14
    

    但是,如果df2不能以相同的方式开始行,那么它将行不通:

    df2 = pd.DataFrame(data = {'col1' : [2, 3,4], 'col2' : [11, 12,13]})
    

    将产生整个df:

    In [140]:
    
    df1[~df1.isin(df2)].dropna()
    Out[140]:
       col1  col2
    0     1    10
    1     2    11
    2     3    12
    3     4    13
    4     5    14
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看