【发布时间】:2021-08-31 16:18:12
【问题描述】:
我有一个数据集,我试图在其中探索将变量限制在给定值并将超出部分滚动到后续区间的影响。从概念上讲,我可以看到一些使用 cumsum() 或类似方法的方法,但很难了解如何以合乎逻辑的方式实现它。
输入数据不大(10,000 行,而不是 100,000 行);所以效率并不重要。
表示输入数据:
| interval starting | kWh |
|---|---|
| 2021-01-01 19:00 | 12.2 |
| 2021-01-01 19:30 | 14.7 |
| 2021-01-01 20:00 | 20.2 |
| 2021-01-01 20:30 | 30.7 |
| 2021-01-01 21:00 | 36.3 |
| 2021-01-01 21:30 | 36.7 |
| 2021-01-01 22:00 | 30.1 |
| 2021-01-01 22:30 | 26.3 |
| 2021-01-01 23:00 | 18.1 |
| 2021-01-01 23:30 | 15.8 |
| 2021-01-02 00:00 | 11.4 |
| 2021-01-02 00:30 | 10.2 |
| 2021-01-02 01:00 | 11.9 |
| 2021-01-02 01:30 | 12.3 |
| 2021-01-02 02:00 | 9.1 |
| 2021-01-02 02:30 | 8.6 |
| 2021-01-02 03:00 | 8.3 |
| 2021-01-02 03:30 | 10.1 |
而我想要做的是将 kWh 列中的值限制为最大 20.0;如果该值超过我想将超出部分滚动到下一个间隔,然后是下一个,依此类推,直到所有能量都被考虑在内(因此在足够宽的间隔内的总和始终相同),但峰值永远不会超过限制。
期望的输出:
| interval starting | kWh | limit_kWh |
|---|---|---|
| 2021-01-01 19:00 | 12.2 | 12.2 |
| 2021-01-01 19:30 | 14.7 | 14.7 |
| 2021-01-01 20:00 | 20.2 | 20.0 |
| 2021-01-01 20:30 | 30.7 | 20.0 |
| 2021-01-01 21:00 | 36.3 | 20.0 |
| 2021-01-01 21:30 | 36.7 | 20.0 |
| 2021-01-01 22:00 | 30.1 | 20.0 |
| 2021-01-01 22:30 | 26.3 | 20.0 |
| 2021-01-02 23:00 | 18.1 | 20.0 |
| 2021-01-02 23:30 | 15.8 | 20.0 |
| 2021-01-02 00:00 | 11.4 | 20.0 |
| 2021-01-02 00:30 | 10.2 | 20.0 |
| 2021-01-02 01:00 | 11.9 | 20.0 |
| 2021-01-02 01:30 | 12.3 | 20.0 |
| 2021-01-02 02:00 | 9.1 | 20.0 |
| 2021-01-02 02:30 | 8.6 | 17.7 |
| 2021-01-02 03:00 | 8.3 | 8.3 |
| 2021-01-02 03:30 | 10.1 | 10.1 |
因此,在这个时间段内,总能量是相同的,但峰值能量永远不会超过指定的限制。
任何帮助将不胜感激!
【问题讨论】:
标签: r