我有一个表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是输出。输入仅前两列)。在
^{pr2}$
这里有一个重新采样/滚动的方法。使用pandas版本0.18.0和python3.5时,我收到一个奇怪的警告。我不认为这是一个问题,但不知道它为什么会产生。在
这假设索引是“timestamp”,如果不是,请在下面的前面加上
df = df.set_index('timestamp')
:在这个小小的数据帧上,它的速度似乎是它的两倍,但是你必须在一个更大的数据帧上测试它,以获得相对速度的合理概念。在
希望这有点自我解释。升序排序是必要的,因为滚动只允许向后或居中的窗口。在
考虑一个运行速度更快的
apply()
解决方案。函数返回每行中时间条件序列的最大值。在相关问题 更多 >
编程相关推荐