#pyspark
Вопрос:
Мне нужно создать новый столбец в фрейме данных pyspark, используя значение столбца из строки максимальной даты над окном. Учитывая приведенный ниже фрейм данных, мне нужно установить новый столбец с именем max_adj_factor для каждой записи для каждого актива на основе коэффициента корректировки на самую последнюю дату.
---------------- ------- ---------- -----
|adjustmentFactor|assetId| date| nav|
---------------- ------- ---------- -----
|9.96288362069999|4000123|2019-12-20| 18.5|
|9.96288362069999|4000123|2019-12-23|18.67|
|9.96288362069999|4000123|2019-12-24| 18.6|
|9.96288362069999|4000123|2019-12-26|18.57|
|10.0449181987999|4000123|2019-12-27|18.46|
|10.0449181987999|4000123|2019-12-30|18.41|
|10.0449181987999|4000123|2019-12-31|18.34|
|10.0449181987999|4000123|2020-01-02|18.77|
|10.0449181987999|4000123|2020-01-03|19.07|
|10.0449181987999|4000123|2020-01-06|19.16|
|10.0449181987999|4000123|2020-01-07| 19.2|
Комментарии:
1. каков ваш ожидаемый результат?
Ответ №1:
Вы можете использовать max_by над окном:
df.withColumn("max_adj_factor",
F.expr("max_by(adjustmentFactor, date)")
.over(Window.partitionBy("assetId")))
.show()
Выход:
---------------- ------- ---------- ----- ----------------
|adjustmentFactor|assetId| date| nav| max_adj_factor|
---------------- ------- ---------- ----- ----------------
|9.96288362069999|4000123|2019-12-20| 18.5|10.0449181987999|
|9.96288362069999|4000123|2019-12-23|18.67|10.0449181987999|
|9.96288362069999|4000123|2019-12-24| 18.6|10.0449181987999|
|9.96288362069999|4000123|2019-12-26|18.57|10.0449181987999|
|10.0449181987999|4000123|2019-12-27|18.46|10.0449181987999|
|10.0449181987999|4000123|2019-12-30|18.41|10.0449181987999|
|10.0449181987999|4000123|2019-12-31|18.34|10.0449181987999|
|10.0449181987999|4000123|2020-01-02|18.77|10.0449181987999|
|10.0449181987999|4000123|2020-01-03|19.07|10.0449181987999|
|10.0449181987999|4000123|2020-01-06|19.16|10.0449181987999|
|10.0449181987999|4000123|2020-01-07| 19.2|10.0449181987999|
---------------- ------- ---------- ----- ----------------