如何根据ID和日期计算运行总和

时间:2019-04-07 09:40:30

标签: python pandas pandas-groupby

我有一个数据集,其中有以下几列:日期,ID,值。然后,我需要每个ID的前3天(包括当天本身)的运行总和。

我试图在StackOverflow上看几个类似的问题,但是没有一个给我正确的结果。

如果在过去3天内仅看到一次ID,则总和应等于该单个值。显然,如果在最近3天内两次被查看,情况也是如此。

所需的输出是“ sum_3days”列:

date    id  value   sum_3days  
01/01/2019  1   2   2    
01/01/2019  2   3   3    
02/01/2019  1   2   4    
02/01/2019  2   5   8   
03/01/2019  1   2   6   
03/01/2019  2   1   9    
04/01/2019  1   6   10    
05/01/2019  1   3   11
06/01/2019  1   6   15
06/01/2019  2   8   8
07/01/2019  1   3   12    
07/01/2019  2   2   10

所以基本上,总和应该“给我每个ID在最近3天内拥有的所有值的总和”

2 个答案:

答案 0 :(得分:2)

groupbytransformlambdarollingsum一起使用:

df['sum_3days'] = (df.groupby(['id'])['value']
                   .transform(lambda x: x.rolling(3, min_periods=1).sum()))

[输出]

         date  id  value  sum_3days
0  2019-01-01   1      2          2
1  2019-01-01   2      3          3
2  2019-02-01   1      2          4
3  2019-02-01   2      5          8
4  2019-03-01   1      2          6
5  2019-03-01   2      1          9
6  2019-04-01   1      6         10
7  2019-05-01   1      3         11
8  2019-06-01   1      6         15
9  2019-06-01   2      8         14
10 2019-07-01   1      3         12
11 2019-07-01   2      2         11

答案 1 :(得分:0)

您是否尝试过该功能

Cumsum()

此网页可能有帮助 http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.cumsum.html