Я использую pyspark для генерации фрейма данных, в котором мне нужно обновить столбец 'amt' значением amt в предыдущей строке, только когда amt = 0.
Например, ниже мой фрейм данных
+---+-----+
| id|amt |
+---+-----+
| 1| 5|
| 2| 0|
| 3| 0|
| 4| 6|
| 5| 0|
| 6| 3|
+---+-----+
Теперь я хочу создать следующий DF.всякий раз, когда amt = 0, столбец modi_amt будет содержать ненулевое значение предыдущей строки, иначе никаких изменений.
+---+-----+----------+
| id|amt |modi_amt |
+---+-----+----------+
| 1| 5| 5|
| 2| 0| 5|
| 3| 0| 5|
| 4| 6| 6|
| 5| 0| 6|
| 6| 3| 3|
+---+-----+----------+
Я могу получить значение предыдущих строк, но мне нужна помощь для строк, где появляется несколько 0 amt (Например, id = 2,3)
код, который я использую:
from pyspark.sql.window import Window
my_window = Window.partitionBy().orderBy("id")
DF= DF.withColumn("prev_amt", F.lag(DF.amt).over(my_window))
DF= DF.withColumn("modi_amt",when(DF.amt== 0,DF.prev_amt).otherwise(DF.amt)).drop('prev_amt')
Я получаю DF
+---+-----+----------+
| id|amt |modi_amt |
+---+-----+----------+
| 1| 5| 5|
| 2| 0| 5|
| 3| 0| 0|
| 4| 6| 6|
| 5| 0| 6|
| 6| 3| 3|
+---+-----+----------+
в основном id 3 также должениметь modi_amt = 5