Накопленная сумма, которая сбрасывается после превышения порога - PullRequest
0 голосов
/ 18 мая 2019

Я относительно новичок с 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))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...