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

标签 python pandas pandas-groupby

我有一个数据集,其中包含以下列:日期、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和一个带有 rollinglambdasum :

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/

相关文章:

python - pandas 分组数据框 - python

python - 使用引用组标准化 Pandas GroupBy 数据框中的数据

python - 如何删除 Pandas 组中的重复项

python - 连续绘图(opencv)

python - 无服务器 WSGI 本地服务器运行缓慢

python - 我如何在 Python 中的一列中删除多个值

python - 如何将 groupby 与多索引列一起使用

python - 网格未按预期工作 python Tkinter

python - 使用 Python 在 Google App Engine 中的应用启动时加载全局可访问的单例

python - 将字典列表转换为单独的列 pandas