[英]How to shift a column based on other columns in pyspark
我需要根据 pyspark 中数据框中的 Col2 和 Col3 列将 Col4 向左移动。 Col4 值应在 col2 连续更改时更改。 Col3 主要跟踪 Col2 值的新序列。 Col1 还应该对最终输出进行分区。 输出应该类似于 shift_col4。
ID Col1 Col2 Col3 Col4 shift_col4
1 1 10 1 4 null
2 1 11 1 8 4
3 1 12 1 12 8
4 1 1 2 16 12
5 1 3 2 20 16
4 2 1 1 16 null
5 2 4 1 20 16
我不知道您是否只需要查看 Col2 是否更改为移位(推送)Col4,需要更多信息,但我这样做是基于 Col2 每次更改时都会将 Col4 的值向前推。
w = Window.partitionBy('Col1').orderBy('ID', 'Col1')
df = df.withColumn('shift_4', f.when(f.lag('Col2').over(w) != f.col('Col2'), f.lag('Col4').over(w)))
df.show()
+---+----+----+----+----+-------+
| ID|Col1|Col2|Col3|Col4|shift_4|
+---+----+----+----+----+-------+
| 1| 1| 10| 1| 4| null|
| 2| 1| 11| 1| 8| 4|
| 3| 1| 12| 1| 12| 8|
| 4| 1| 1| 2| 16| 12|
| 5| 1| 2| 2| 20| 16|
| 4| 2| 1| 1| 16| null|
| 5| 2| 2| 1| 20| 16|
+---+----+----+----+----+-------+
如果您需要跟踪 Col2 序列并且只是在更改中断时进行更改,您可以创建另一个窗口函数并使用 rank 来查看它,然后将其包含在when函数的逻辑中。 在这种情况下,您可以查看这个问题,它可能会对您有所帮助: Counting Continuous occurrences of a specific value in PySpark
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.