循环浏览熊猫的滚动总和(以获取最近的100个总和)

时间:2019-11-07 03:49:18

标签: python pandas loops cumulative-sum rolling-computation

我有以下数据:

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。

快进至2019年10月1日,数量为9.4,回顾累计金额为95.66。由于累计总和不大于100,因此输出将为NULL值。

接下来,我们将看11/01/2019。这里的数量是9.11,回头看,累计和是100.62。之所以是100.62而不是104.77是因为从11/01/2019到02/01/2019的数量总和(向后看)首先达到100 /略高于100。

类似地,在2019年12月1日,此处的数量为9.18,而回溯累计总和为100.8,因为从12/01/2019到02/01/2019的数量总和(向后看)命中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

1 个答案:

答案 0 :(得分:0)

只需使用cumsum()函数:

In [7]: df['Window_Sum'] = df['Qty'].cumsum()

In [8]: df.head()
Out[8]:
        Date  Qty  Window_Sum
0  01-Jan-19  4.0         4.0
1  02-Jan-19  1.0         5.0
2  03-Jan-19  6.0        11.0
3  04-Jan-19  3.0        14.0
4  05-Jan-19  3.0        17.0

希望这就是您想要的!