df1中所有不在df2中的行 [英] all rows in df1 that are NOT in df2

查看:141
本文介绍了df1中所有不在df2中的行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个看起来像的df(df1)

I have a df (df1) that looks like:

df1 = pd.DataFrame([
        ['YYZ', 'SFO', 1],
        ['YYZ', 'YYD', 1],
        ['YYZ', 'EWR', 1],
        ['YYZ', 'DFW', 1],
        ['YYZ', 'LAX', 1],
        ['YYZ', 'YYC', 1]
    ], columns=['city1', 'city2', 'val'])

我还有另一个df(df2),它是df1的子集:

I have another df (df2) that is a subset of df1:

df2 = pd.DataFrame([
        ['YYZ', 'SFO', 1],
        ['YYZ', 'YYD', 1]
    ], columns=['city1', 'city2', 'val'])

我想要df1中所有不在df2中的行.

I want all rows in df1 that are NOT in df2.

我尝试了本文基于条件切片的各种选项2列的值,但是我无法使其正常工作.

I've tried various options described in this post conditional slicing based on values of 2 columns, however I haven't been able to get it to work.

您的帮助将不胜感激.

推荐答案

  • mergeindicator=True一起使用
  • 然后使用query仅删除带有'left_only'的内容
    • Use merge with indicator=True
    • Then use query to strip out only those with 'left_only'
    • df1.merge(
          df2, how='outer', indicator=True
      ).query('_merge == "left_only"').drop('_merge', 1)
      
        city1 city2  val
      2   YYZ   EWR    1
      3   YYZ   DFW    1
      4   YYZ   LAX    1
      5   YYZ   YYC    1
      

      这篇关于df1中所有不在df2中的行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆