enter image description here
上面是pyspark数据框架。我需要添加一个新列-“new_col”,其中我需要应用下面的转换-
1.当差值大于0时,则选择与组B分区内最后一个差值列中的值一样多的row_id
1.当差值小于0时,则在组A分区内从开始处选择与差值列中的值一样多的row_id
1.当difference为0时,则选择所有row_id
例如,如果差值为2,则需要从组B的最后一个值即4,5中选取值。类似地,如果差值为-2,则需要从组A的idx值即1,2中选取值nested_window = Window().partitionBy('Team Name').orderBy('row_id')
df = df.withColumn("new_col", F.when(df['difference'] > 0, F.last(df['row_id']).over(nested_window))) )
我只得到了最后一个值,而不是期望差值>0时的多个值
1条答案
按热度按时间zlwx9yxi1#
我试过
Window()
,但无法得到多个值。所以,使用UDF,你可以像下面这样实现你的要求。样本起始数据:
首先,使用group by并将
row_id
的排序数组作为一个新列并将其存储在一个新的嵌套框架中。它将给予像下面这样的框架。
现在,为case条件创建一个UDF,并像下面这样从框架中调用它。
结果: