我在pyspark中有一个数据框,包含2019年和2020年的数据。
如果2020年日期的任何预订值小于25,则将其替换为2019年相同日期的移动平均值。
例子:
必修的:
我能做到
targetDf = df.withColumn("Booking",when(df["date"] == "2020-01-12", 75).otherwise(df["Booking"]))
但是我有太多的值要替换,所以我尝试了下面的代码
targetDf = df.withColumn("Booking",\
when(df["Booking"] <= 25, (df["movingAvg"].when(df["date"] == ?)).otherwise(df["Booking"]))
我不知道怎么写(?)去年同期移动平均值。
2条答案
按热度按时间pvabu6sv1#
您可以使用self-left-join,条件是
VenueName = VenueName
以及date - 1 year = date
,如果预订<25,则获得去年平均值when
:姓名:idvenuenamedatebookingmovingavg1367tortuga2020-01-127537.428571431011tortuga2019-01-12100.075.10286
vdgimpew2#
对于这种类型的用例,可以使用相关子查询。它类似于自连接,但语法更直观。