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

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 的子集:
df2 = pd.DataFrame([
        ['YYZ', 'SFO', 1],
        ['YYZ', 'YYD', 1]
    ], columns=['city1', 'city2', 'val'])

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

我已经尝试了这篇文章 conditional slicing based on values of 2 columns 中描述的各种选项,但是我一直无法让它工作。

您的帮助将不胜感激。

最佳答案

  • 使用 mergeindicator=True
  • 然后使用 query 只去掉那些带有 '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
    

    关于python - df1 中所有不在 df2 中的行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41901322/

    10-10 18:59