首页 > 解决方案 > 如何在 pyspark 中创建新列,其中条件取决于列的后续值?

问题描述

我有以下 pyspark 数据框。如下图所示,我需要从 Value1 列创建 Value2 列。问题是对于所有具有相同时间值的行,Value2列中的值需要是Value1中与该时间对应的第一个值。因此,如果您查看时间为 16:07 的所有行的图片,则该值需要为 100。我知道我需要使用某种形式的条件,但我不知道该怎么做,所以我是想知道是否有人能指出我正确的方向。

data={
    ‘Name’:[‘John’,’Kate’,’William’,’Andrew’,’Nicole’,’Nicola’,’Gavin’,’Gabriel’, ‘John’,’Kate’,’William’,’Andrew’,’Nicole’,’Nicola’,’Gavin’,’Gabriel’],
    ’Value1’:[10,20,50,60,100,200,250,300,450,520,570,600,630,670,690,700,720],
    ’Time’:[‘ 15/06/2020  16:05:00’, ‘ 15/06/2020  16:05:00’, ‘ 15/06/2020  16:05:00’, ‘ 15/06/2020  16:06:00’, ‘ 15/06/2020  16:07:00’, ‘ 15/06/2020  16:07:00’, ‘ 15/06/2020  16:08:00’, ‘ 15/06/2020  16:09:00’, ‘ 15/06/2020  16:10:00’, ‘ 15/06/2020  17:20:00’, ‘ 15/06/2020  17:21:00’, ‘ 15/06/2020  17:22:00’, ‘ 15/06/2020  17:22:00’, ‘ 15/06/2020  17:22:00’, ‘ 15/06/2020  17:22:00’, , ‘ 15/06/2020  17:25:00’, , ‘ 15/06/2020  17:26:00’}

df=pd.DataFrame(data)
df_spark=spark.createDataFrame(df)

在此处输入图像描述

标签: apache-sparkpysparkconditional-statements

解决方案


试试窗口函数。您在“时间”列定义的窗口中获得最小值 1:

    from pyspark.sql import Window
    window = Window.partitionBy('Time')
    df_spark.withColumn('Value2', min('Value1').over(window))

推荐阅读