Я хочу заполнить пропущенное значение последним значением строки в Pyspark: - PullRequest
0 голосов
/ 11 октября 2018

Мой df имеет несколько столбцов

Запрос, который я пытался:

df=df.withColumn('Column_required',F.when(df.Column_present>1,df.Column_present).otherwise(lag(df.Column_present))

В противном случае невозможно работать.,Столбец, по которому я хочу операцию:

Column_present       Column_required
40000                 40000
Null                  40000
Null                  40000
500                   500
Null                  500
Null                  500

1 Ответ

0 голосов
/ 11 октября 2018

Я думаю, что вашим решением может быть использование last вместо задержки:

df_new = spark.createDataFrame([
(1, 40000), (2, None),  (3,None), (4,None),
(5,500), (6,None), (7,None)
], ("id", "Col_present"))

df_new.withColumn('Column_required',when(df_new.Col_present>1,df_new.Col_present).otherwise(last(df_new.Col_present,ignorenulls=True).over(Window.orderBy("id")))).show()

Это даст желаемый результат:

+---+-----------+---------------+
| id|Col_present|Column_required|
+---+-----------+---------------+
|  1|      40000|          40000|
|  2|       null|          40000|
|  3|       null|          40000|
|  4|       null|          40000|
|  5|        500|            500|
|  6|       null|            500|
|  7|       null|            500|
+---+-----------+---------------+

Но учтите, чтоФункция window требует сортировки по столбцу.Вот почему я использовал столбец id в примере.Вы можете создать столбец id самостоятельно, если ваш фрейм данных не содержит сортируемый столбец с monotonically_increasing_id().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...