小能豆

删除所有与某些行重复的行

py

我见过几个这样的问题,但没有一个让我满意的答案。这是一个示例 DataFrame:

+------+-----+----+
|    id|value|type|
+------+-----+----+
|283924|  1.5|   0|
|283924|  1.5|   1|
|982384|  3.0|   0|
|982384|  3.0|   1|
|892383|  2.0|   0|
|892383|  2.5|   1|
+------+-----+----+

我只想通过"id""value"列来识别重复项,然后删除所有实例。

在这种情况下:

  • 第 1 行和第 2 行是重复的(我们再次忽略“类型”列)
  • 第 3 行和第 4 行是重复的,因此只应保留第 5 行和第 6 行:

输出结果为:

+------+-----+----+
|    id|value|type|
+------+-----+----+
|892383|  2.5|   1|
|892383|  2.0|   0|
+------+-----+----+

我试过了

df.dropDuplicates(subset = ['id', 'value'], keep = False)

但是 PySpark 中没有“保留”功能(因为它在 中pandas.DataFrame.drop_duplicates)。

我还能怎样做呢?


阅读 27

收藏
2024-11-05

共1个答案

小能豆

你可以使用窗口函数来实现

from pyspark.sql import Window, functions as F
df.withColumn(
  'fg', 
  F.count("id").over(Window.partitionBy("id", "value"))
).where("fg = 1").drop("fg").show()
2024-11-05