【发布时间】:2016-03-29 10:29:12
【问题描述】:
我有一张表df,列有"timestamp" 和"Y"。我想添加另一列"MaxY",其中包含最大的Y 值,最多在未来24 小时内。那是
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.
-------------------------------
【问题讨论】:
-
帮助我们为您提供帮助!请根据提供的样本提供一个包含 5-7 行的样本数据集和预期的输出/结果集。
-
@JohnE,据我了解,
rolling()仅适用于固定行数的窗口。我的是固定的时间间隔。 -
@MaxU,我希望简单代码的 sn-p 就足够了。现在我也添加了一张桌子。是不是更清楚了?
-
@JohnE,我也尝试使用
rolling和resample来做这件事,但我做不到。你能给我们指路吗?谢谢! -
@MaxU 好的,只是为了你,我试了一下。 ;-) 这比我想象的要棘手,但我认为工作正常。