如何解决如何从与pyspark中的前一年相同的列中减去行值?
我有这样的输入数据,以年名称为列,我想用新列作为评分差异从今年减去过去一年的评分。
year,movie_name,language,rating
2019,akash,english,10
2019,antony,kannada,9
2020,10
2020,8
我的结果数据框:我想要的
year,rating,rating_diff
2019,10,-
2019,9,-
2020,0
2020,8,-1
我们将不胜感激,谢谢。
解决方法
由于您要比较去年,因此year
应该是按列排序。但也要保留movie_name
和language
,它们应该按列进行分区。
将行的评级与最近的年份进行比较,当lag
的顺序升序时,将使用date
函数。
import pyspark.sql.functions as f
from pyspark.sql import Window
w = Window.partitionBy('movie_name','language').orderBy('year')
df.withColumn('lead',f.lag('rating',1).over(w)) \
.withColumn('rating_diff',f.when(f.col('lead').isNotNull(),f.col('rating') - f.col('lead')).otherwise(f.lit(None))) \
.show(10,False)
+----+----------+--------+------+----+-----------+
|year|movie_name|language|rating|lead|rating_diff|
+----+----------+--------+------+----+-----------+
|2019|antony |kannada |9 |null|null |
|2020|antony |kannada |8 |9 |-1 |
|2019|akash |english |10 |null|null |
|2020|akash |english |10 |10 |0 |
+----+----------+--------+------+----+-----------+
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。