【发布时间】:2019-11-07 03:49:18
【问题描述】:
我有以下数据:
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,Qty是4.15,回头看没有其他值,所以累计和不大于100,所以输出值为NULL。
快进到 10/01/2019,数量是 9.4,回头看累计总和是 95.66。由于累计和不大于100,所以输出为NULL值。
接下来,我们将看看 2019 年 11 月 1 日。这里的Qty是9.11,回头看累计是100.62。之所以是 100.62 而不是 104.77,是因为从 2019 年 11 月 1 日到 2019 年 2 月 1 日(向后看)的数量总和首先达到 100/略高于 100。
同样,在 2019 年 12 月 12 日,这里的 Qty 是 9.18,回头看累计总和是 100.8,因为从 12/01/2019 到 02/01/2019(向后看)的 Qty 总和是 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
【问题讨论】:
标签: python pandas loops cumulative-sum rolling-computation