代码之家  ›  专栏  ›  技术社区  ›  Paul Plato

根据另一列的值筛选数据帧列[重复]

  •  0
  • Paul Plato  · 技术社区  · 8 年前

    这个问题已经有了答案:

    假设我有两个数据帧,

       **A**                   **B**
    
    | a | b | c |                |a|
    
    | 1 | 2 | 3 |                |1|
    

    我想根据数据集B中A列的值筛选数据框A的内容。

    WHERE NOT (A.a in (select a from B)
    

    我怎样才能做到这一点?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Florian    8 年前

    若要将左表中的所有行保留在右表中有匹配项的位置,可以使用 leftsemi 加入。在这种情况下,只有在 在正确的表中匹配,在这种情况下,可以使用 leftanti 加入:

    df = spark.createDataFrame([(1,2,3),(2,3,4)], ["a","b","c"])
    df2 = spark.createDataFrame([(1,2)], ["a","b"])
    
    df.join(df2,'a','leftanti').show()
    

    数据框

    +---+---+---+
    |  a|  b|  c|
    +---+---+---+
    |  1|  2|  3|
    |  2|  3|  4|
    +---+---+---+
    

    DF2型

    +---+---+
    |  a|  b|
    +---+---+
    |  1|  2|
    +---+---+
    

    结果

    +---+---+---+
    |  a|  b|  c|
    +---+---+---+
    |  2|  3|  4|
    +---+---+---+
    

    希望这有帮助!