我有一张桌子,在第一个数字显示之后,需要重复该数字,然后填写所有列
这是一个表格示例:
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
答案 0 :(得分:0)
假设这些空格实际上是null
s *,则可以使用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|
#+----------+------+------+------+------+------+------+------+
*如果不是,请首先replace blanks with null。