Вперед заполнить строку первым не пропущенным значением - PullRequest
1 голос
/ 05 июня 2019

У меня есть таблица, и после того, как появляется первое число, число нужно повторить, заполните все столбцы после

. Вот пример таблицы:

student_id    2016Q1   2016Q2   2016Q3 2016Q4  2017Q1 2017Q2 2017Q3
1                        1
2                 1
3                                 1
4                                                1
5                                                1
6                                                        1
7                                                 1

Яиспользуя pyspark и Python.Я пытаюсь сделать это вручную в Excel, но это слишком много ручного редактирования.Интересно, может ли какая-либо функция в pyspark или pyspark.sql сгенерировать следующую таблицу?Спасибо!

Я ожидаю, что результат будет выглядеть следующим образом

student_id    2016Q1   2016Q2   2016Q3 2016Q4  2017Q1 2017Q2 2017Q3
1                        1        1       1       1     1      1
2                 1      1        1       1       1     1      1
3                                 1       1       1     1      1
4                                                 1     1      1
5                                                 1     1      1
6                                                       1      1
7                                                 1     1      1

1 Ответ

0 голосов
/ 06 июня 2019

Предполагая, что эти пробелы на самом деле null с *, вы можете использовать pyspark.sql.functions.coalesce.

Перечислите ваши столбцы и coalesce значения каждого столбца до и включая текущий столбец. Это вернет первое ненулевое значение в этой строке.

from pyspark.sql.functions import coalesce

fill_cols = df.columns[1:]  # exclude the student_id

df.select(
    "student_id",
    *[coalesce(*fill_cols[:i+1]).alias(c) for i, c in enumerate(fill_cols)]
).show()
#+----------+------+------+------+------+------+------+------+
#|student_id|2016Q1|2016Q2|2016Q3|2016Q4|2017Q1|2017Q2|2017Q3|
#+----------+------+------+------+------+------+------+------+
#|         1|  null|     1|     1|     1|     1|     1|     1|
#|         2|     1|     1|     1|     1|     1|     1|     1|
#|         3|  null|  null|     1|     1|     1|     1|     1|
#|         4|  null|  null|  null|  null|     1|     1|     1|
#|         5|  null|  null|  null|  null|     1|     1|     1|
#|         6|  null|  null|  null|  null|  null|     1|     1|
#|         7|  null|  null|  null|  null|     1|     1|     1|
#+----------+------+------+------+------+------+------+------+

* Если нет, сначала замените пробелы на ноль .

...