Я относительно новичок с pyspark и python в целом.Это, вероятно, тривиально, но я не могу понять это.
У меня есть набор данных, который содержит идентификатор, столбец DATE и столбец X, который содержит числа с плавающей запятой.Я хотел бы, чтобы по идентификатору и по порядку DATE был вычислен промежуточный итог X. Когда этот промежуточный итог превышает значение Y, перезапустите итоговый результат.Ниже приведен пример, где Y = 20:
|ID |DATE | X | cumsum_X |
-----------------------------------
| 1| 2017-03-01| 10| 10|
| 1| 2017-03-02| 12| 22|
| 1| 2017-03-03| 5| 5|
| 1| 2017-03-04| 10| 15|
| 2| 2015-01-01| 6| 6|
| 2| 2015-01-03| 7| 13|
Я смог рассчитать совокупную сумму по группе и упорядочил ее с помощью приведенного ниже кода, но я не уверен, как его изменитьчтобы получить поведение сброса, которое я хочу.
win =(Window(partitionBy('ID').over('DATE'))
.rangeBetween(Window.unboundedPreceding, 0))
df = df.withColumn('cumsum_x', F.Sum('X').over(win))