gpt4 book ai didi

Pyspark:在groupBy之后删除列条件上的行

转载 作者:行者123 更新时间:2023-12-02 03:29:32 26 4
gpt4 key购买 nike

这是我的输入数据框:

id val    
1 Y
1 N
2 a
2 b
3 N

结果应该是:

id val    
1 Y
2 a
2 b
3 N

我想对 val 中同时包含 Y 和 N 的 col id 进行分组,然后删除列 val 包含“N”的行。请帮我解决这个问题,因为我是 pyspark 的初学者

最佳答案

您可以首先使用 val=="Y" 过滤器识别有问题的行,然后将此数据帧连接回原始数据帧。最后,您可以过滤 Null 值和要保留的行,例如val==Y。即使有很多行,Pyspark 也应该能够处理自连接。示例如下:

df_new = spark.createDataFrame([
(1, "Y"), (1, "N"), (1,"X"), (1,"Z"),
(2,"a"), (2,"b"), (3,"N")
], ("id", "val"))

df_Y = df_new.filter(col("val")=="Y").withColumnRenamed("val","val_Y").withColumnRenamed("id","id_Y")
df_new = df_new.join(df_Y, df_new["id"]==df_Y["id_Y"],how="left")
df_new.filter((col("val_Y").isNull()) | ((col("val_Y")=="Y") & ~(col("val")=="N"))).select("id","val").show()

结果将是您想要的:

+---+---+
| id|val|
+---+---+
| 1| X|
| 1| Y|
| 1| Z|
| 3| N|
| 2| a|
| 2| b|
+---+---+

关于Pyspark:在groupBy之后删除列条件上的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52198036/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com