【发布时间】:2021-04-24 15:32:44
【问题描述】:
在 Python/Pandas 中,我显然有一项艰巨的任务要做。
我有一个这样的数据框:
| DATETIME | PRODUCT | AMOUNT |
我需要为每种产品(我有两个以上的产品)生成最后一列,其中包含过去 5 分钟内(假设已售出的产品)数量的累积总和。请参阅以下示例:
| DATETIME | PRODUCT | AMOUNT | CUM SUM |
| 2020-01-01 17:10:00 | A | 20 | 20 -> 20 |
| 2020-01-01 17:12:00 | B | 30 | 30 -> 30 |
| 2020-01-01 17:13:00 | A | 10 | 20+10 -> 30 |
| 2020-01-01 17:13:00 | A | 15 | 20+10+15 -> 45 |
| 2020-01-01 17:16:00 | B | 10 | 30+10 -> 40 |
| 2020-01-01 17:17:00 | A | 15 | 10+15+15 -> 40 |
| 2020-01-01 17:20:00 | B | 20 | 10+20 -> 30 |
| 2020-01-01 17:20:00 | B | 10 | 10+20+10 -> 40 |
| 2020-01-01 17:25:00 | A | 10 | 10 -> 10 |
请注意,情侣(日期时间、产品)可能不是唯一的,但我仍然必须根据数据框索引保持订单。
我试过了:
- 滚动功能:但不幸的是我没有固定的窗口大小,并且我没有唯一的一对(日期时间,产品)所以我不能使用日期时间作为索引然后使用
.rolling('5 minutes')。 -
Groupby(product).cumsum():但我无法将总和限制在最后几分钟。
可能,我需要一些平滑且性能水平不太差的东西,才能应用于相当大的 df 。
你有什么提示吗?
提前谢谢你。
【问题讨论】:
-
你不能先做
resample(5分钟)然后滚动吗? -
@DanailPetrov 谢谢,但我需要一个移动窗口,而不是固定时间步长
标签: python pandas time-series rolling-computation cumsum