【发布时间】:2021-03-02 17:31:35
【问题描述】:
考虑以下数据框:
date values
0 2020-01-07 09:00:00 5
1 2020-01-07 10:00:00 8
2 2020-01-07 11:00:00 9
3 2020-01-07 12:00:00 5
4 2020-01-07 13:00:00 0
5 2020-01-07 14:00:00 0
6 2020-01-07 15:00:00 1
7 2020-01-07 16:00:00 7
8 2020-01-08 09:00:00 6
9 2020-01-08 10:00:00 9
10 2020-01-08 11:00:00 2
11 2020-01-08 12:00:00 4
12 2020-01-08 13:00:00 5
13 2020-01-08 14:00:00 2
14 2020-01-08 15:00:00 4
df = pd.DataFrame({'date':pd.date_range(start='1/7/2020', freq='BH', periods=20),
'values':np.random.randint(0, 10, 20)})
我想创建一个新列,其中包含未来 11 小时内 values 列的总和。我使用了df.rolling('11H', on='date').sum(),但是这会计算过去 11 小时内的sum。
我遇到了像 How to Reverse Rolling Sum? 这样的解决方案,但由于我的日期列只包含营业时间,我不能简单地改变结果(因为我不知道我必须改变多少行,因为不同的窗口大小)。
它通过df.iloc[::-1].rolling('11H', on='date').sum().iloc[::-1] 起作用,但是将dataframe 反转两次感觉有点hacky。还有其他优雅的解决方案吗?
【问题讨论】:
标签: python-3.x pandas rolling-computation