我有一个数据集,其中包含以下列:日期、id、值。然后我想要每个 id 的前 3 天(包括当天本身)的运行总和。
我尝试在 StackOverflow 上查看几个类似的问题,但没有一个给出正确的结果。
如果该 ID 在过去 3 天内仅出现过一次,则总和应等于该单个值。显然,如果过去 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 天内拥有的所有值的总和”
最佳答案
使用groupby
, transform
和一个带有 rolling
的 lambda
和 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
关于python - 如何根据ID和日期计算运行总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55557567/