我有一个数据集,其中有以下几列:日期,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天内拥有的所有值的总和”
答案 0 :(得分:2)
将groupby
,transform
和lambda
与rolling
和sum
一起使用:
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