我是一个新的数据砖,我试图摆脱重复的记录列“病人id”在DF使用“删除重复的方法。”我想知道是否有一种方法可以根据time_stamp列(DF中的另一列)删除patient_id列中的重复记录。因此,我基本上想要的是保留patient_idrd,它具有最大的时间戳,当Iop重复时,然后删除其余部分。先谢谢你了
juud5qan1#
你需要使用窗口函数。您可以根据每个患者ID的降序日期定义row_number。然后过滤row_number = 1的记录,即,对于每个患者id,选择最大日期并仅过滤这些记录。
date = ['2022-10-16 17:00:00', '2022-10-16 18:00:00', '2022-10-16 21:00:00', '2022-10-16 22:00:00'] id = [1, 1, 2, 2] df = spark.createDataFrame(list(zip(id, date)), ['id', 'dt']) import pyspark.sql.functions as F from pyspark.sql.window import Window df = sdf.withColumn("rn", F.row_number().over( Window.partitionBy("id").orderBy(col("dt").desc()) )) df.where("rn = 1").select("id","dt").show()
输出-
+---+-------------------+ | id| dt| +---+-------------------+ | 1|2022-10-16 18:00:00| | 2|2022-10-16 22:00:00| +---+-------------------+
1条答案
按热度按时间juud5qan1#
你需要使用窗口函数。您可以根据每个患者ID的降序日期定义row_number。然后过滤row_number = 1的记录,即,对于每个患者id,选择最大日期并仅过滤这些记录。
输出-