我有一张名为df
的表格,其中包含"timestamp"
和"Y"
两列。我想要添加另外一列"MaxY"
,这一列包含未来24小时内最大的Y
值。也就是说
df.MaxY.iloc[i] = df[(df.timestamp > df.timestamp.iloc[i]) &
(df.timestamp < df.timestamp.iloc[i] + timedelta(hours=24))].Y.max()
很显然,像这样计算非常缓慢。有更好的方法吗?
在计算“SumY”时,我可以使用cumsum()
技巧来完成。但是在这里,类似的技巧似乎不起作用。
根据要求,这里提供一个示例表格(MaxY是输出结果。输入仅为前两列)。
-------------------------------
| timestamp | Y | MaxY |
-------------------------------
| 2016-03-29 12:00 | 1 | 3 | rows 2 and 3 fall within 24 hours, so MaxY = max(2,3)
| 2016-03-29 13:00 | 2 | 4 | rows 3 and 4 fall in the time interval, so MaxY = max(3, 4)
| 2016-03-30 11:00 | 3 | 4 | rows 4, 5, 6 all fall in the interval so MaxY = max(4, 3, 2)
| 2016-03-30 12:30 | 4 | 3 | max (3, 2)
| 2016-03-30 13:30 | 3 | 2 | row 6 is the only row in the interval
| 2016-03-30 14:00 | 2 | nan? | there are no rows in the time interval. Any value will do.
-------------------------------
rolling()
仅适用于固定行数的窗口。我的是针对固定时间间隔的。 - Karolis Juodelė