У меня есть следующие данные:
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.2009 г. Кол-во равно 4,15, и, оглядываясь назад, других значений нет, поэтому накопленная сумма не превышает 100. Следовательно, выходное значение равно NULL.
Перемотка впередна 10/01/2019 кол-во составляет 9,4, а совокупная сумма равна 95,66. Поскольку накопленная сумма не превышает 100, выходные данные будут иметь значение NULL.
Далее мы рассмотрим 01.11.2009. Кол-во здесь - 9,11, а совокупная сумма - 100,62. Причина, по которой он равен 100,62, а не 104,77, заключается в том, что сумма Qty с 01.01.2009 по 01.02.2009 (оглядываясь назад) сначала достигает 100 / чуть выше 100.
Аналогично, 12 /01/2019, кол-во здесь составляет 9,18, а совокупная сумма в обратном порядке равна 100,8, потому что сумма кол-во с 12/01/2019 по 01.02.2009 (в обратном направлении) сначала достигает 100 / чуть выше 100.
Есть ли решение, которое позволяет петле в функцию скользящей суммы панд достичь этого результата?
Здесь я пытаюсь добиться того, чтобы кумулятивная сумма достигла 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