请帮帮我,我是新来的。下面是mydataframe
type col1 col2 col3
1 0 41 0
1 27 0 0
1 1 0 0
1 183 0 2
2 null 0 0
2 null 10 0
3 0 126 0
3 2 0 1
3 4 0 0
3 5 0 0
下面应该是我的输出
type col1 col2 col3 result
1 0 41 0 0
1 27 0 0 14
1 1 0 0 13
1 183 0 2 -168
2 null 0 0
2 null 10 0
3 0 126 0 0
3 2 0 1 125
3 4 0 0 121
3 5 0 0 116
挑战在于,必须对每一组类型列执行此操作公式类似于prev(col2)-col1+col3
我尝试在col2上使用window和lag函数来填充结果列,但没有成功。
下面是我的密码
part = Window().partitionBy().orderBy('type')
DF = DF.withColumn('result',lag("col2").over(w)-DF.col1+DF.col3)
现在我正在努力尝试Map功能请帮助
1条答案
按热度按时间q5iwbnjs1#
逻辑有点复杂。
您可以在中执行以下操作
pyspark
Pypark公司斯卡拉
你应该得到以下结果。
编辑
第一个
withColumn
应用公式prev(col2) - col1 + col3
. 第二个withColumn
将的null更改为0result
列。第三个withColumn
用于累计和,即将所有值相加,直到结果列的当前行为止。所以三个withColumn
相当于prev(col2) + prev(results) 1 col1 + col3
. 最后withColumn
正在将中的空值更改为0result
列。