df1中不在df2

时间:2017-01-27 19:10:13

标签: python pandas

我的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中描述的各种选项,但是我还没有能够让它发挥作用。

我们将不胜感激。

3 个答案:

答案 0 :(得分:5)

  • 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

答案 1 :(得分:3)

用简单的英语直接问问题,嗯,我的意思是普通的熊猫。 “选择df1中不在df2中的所有行”转换为:

df1[~df1.isin(df2).all(axis=1)]
Out[127]: 
  city1 city2  val
2   YYZ   EWR    1
3   YYZ   DFW    1
4   YYZ   LAX    1
5   YYZ   YYC    1

答案 2 :(得分:0)

〜符号反转isin并使之有效地成为isnotin