У меня есть следующие данные:
Date Qty
01/01/2019 4.15
02/01/2019 12.39
03/01/2019 14.15
04/01/2019 12.15
05/01/2019 3.26
06/01/2019 6.23
07/01/2019 15.89
08/01/2019 5.55
09/01/2019 12.49
10/01/2019 9.4
11/01/2019 9.11
12/01/2019 9.18
13/01/2019 13.45
14/01/2019 4.52
15/01/2019 0
16/01/2019 0
17/01/2019 8.41
18/01/2019 9.55
19/01/2019 15.43
20/01/2019 16.45
21/01/2019 9.28
22/01/2019 9.55
23/01/2019 7.87
24/01/2019 12.58
25/01/2019 6.12
26/01/2019 6.15
27/01/2019 6.07
28/01/2019 15.53
Результат, которого я пытаюсь достичь, таков:
Date Window_Sum
01/01/2019
02/01/2019
03/01/2019
04/01/2019
05/01/2019
06/01/2019
07/01/2019
08/01/2019
09/01/2019
10/01/2019
11/01/2019 100.62
12/01/2019 109.8
13/01/2019 110.86
14/01/2019 101.23
15/01/2019 101.23
16/01/2019 101.23
17/01/2019 109.64
18/01/2019 103.78
19/01/2019 112.98
20/01/2019 107.99
21/01/2019 104.78
22/01/2019 104.93
23/01/2019 103.69
24/01/2019 107.09
25/01/2019 113.21
26/01/2019 101.39
27/01/2019 107.46
28/01/2019 105.03
Позвольте мне вкратце объяснить логику получения вывода: Итак, на 01.01.2019 количество равно 4,15, и, оглядываясь назад, нет других значений, поэтому совокупная сумма не превышает 100. Следовательно, выходное значение равно NULL.
Перенесемся в 10.01.2019, количество составляет 9,4, а если оглянуться назад, то общая сумма составит 95,66. Поскольку совокупная сумма не превышает 100, на выходе будет значение NULL.
Далее посмотрим на 01.11.2019. Кол-во здесь составляет 9,11, а, оглядываясь назад, общая сумма равна 100,62. Причина, по которой это 100,62, а не 104,77, заключается в том, что сумма Qty с 01.11.2019 по 02.01.2019 (если смотреть назад) сначала достигает 100 / немного выше 100.
Точно так же на 01.12.2019 количество здесь составляет 9,18, а, оглядываясь назад, совокупная сумма составляет 100,8, потому что сумма Qty с 01.12.2019 по 02.01.2019 (если смотреть назад) составляет 100 / немного выше. 100 первых.
Есть ли решение, которое позволяет использовать цикл в функции скользящей суммы pandas для достижения этого результата?
Здесь я пытаюсь добиться, чтобы как только совокупная сумма достигнет 100 или чуть больше 100, я возьму значение и добавлю его в «Window_Sum».
Обновление: удалось запустить код с помощью. Вот решение:
#get last row index
start=len(data)-1
#initialise cumulative sum
cumsum = 0
for i in range(start,-1,-1):
j=i
while cumsum < 100:
cumsum += data.loc[j,'Qty']
if j!=0:
j-=1
else:
cumsum=None
break
data.loc[i,'Window_Sum']=cumsum
cumsum=0