首页 > 解决方案 > 编辑:Pyspark:基于另一个数据框删除行,条件多列

问题描述

我有两个数据框 df1 和 df2。我想根据 df2 列值过滤或删除 df1 上的行

df2,我必须检查客户名称、产品、年份、数量和金额,然后如果 df1 的所有值都相同,我必须放弃。(即)如果 customername = Gopi、product = ball、year = 2020、qty = 0 和 amount <= 0,则下降。

请告诉我如何实现,谢谢。

df1:

customername     product      year    qty     amount
Gopi             ball         2020    0       -100
Hana             ball         2020    2        200
Gopi             toy          2019    10       1000
Mesh             toy          2020    2        200
Tiby             ball         2017    1        100
Mona             pen          2020    1         70
Hana             ball         2019    2        200
Mona             ball         2020    1         70
Mona             toy          2020    1         70
Tiby             toy          2020    1        100

df2:

customername     product      year    qty     amount
Gopi             ball         2020    0       -100
Mona             pen          2020    1         70

预期输出:

customername     product      year    qty     amount
Hana             ball         2020    2        200
Gopi             toy          2019    10       1000
Mesh             toy          2020    2        200
Tiby             ball         2017    1        100
Hana             ball         2019    2        200
Mona             ball         2020    1         70
Mona             toy          2020    1         70
Tiby             toy          2020    1        100

标签: python-3.xdataframepyspark

解决方案


我设法过滤如下。

final_df = df1.join(df2, ((df1.customername == df2.customername) & (df1.product == df2.product) & (df1.year == df2.year) & (df1.qty == df2.qty) & (df1.amount <= 0), how='left_anti'))

谢谢。


推荐阅读