Python 3.x 行旋转

Python 3.x 行旋转,python-3.x,Python 3.x,我有一个包含5000行的timeseries数据帧(df_ohlc_OTF)。 我还有一个listner,它可以接收1乘1的行(df_latest_OTF_candle)。 当我收到一行时,我想删除最旧的一行,并将新的一行添加到数据帧中 现在,我使用一个Concat函数来执行此操作,如下所示: if len(df_ohlc_OTF.index)>5000: df_ohlc_OTF = df_ohlc_OTF.drop(df_ohlc_OTF.index[0], axis='index

我有一个包含5000行的timeseries数据帧(df_ohlc_OTF)。 我还有一个listner,它可以接收1乘1的行(df_latest_OTF_candle)。 当我收到一行时,我想删除最旧的一行,并将新的一行添加到数据帧中

现在,我使用一个Concat函数来执行此操作,如下所示:

if len(df_ohlc_OTF.index)>5000:
   df_ohlc_OTF = df_ohlc_OTF.drop(df_ohlc_OTF.index[0], axis='index') # remove oldest row
   df_ohlc_OTF = pd.concat([df_ohlc_OTF, df_latest_OTF_candle]) # append new row
我怎样才能加快这个过程?df_ohlc_OTF在我执行简单旋转时始终是相同的大小,我认为它不是很快,因为concat创建了我原始数据帧的副本

非常感谢任何帮助


多亏了

一种更快的方法是将数据帧视为环形缓冲区。保留一个单独的计数器,说明哪个位置保存最旧的值,当新值出现时,只需替换最旧的行并增加计数器(数据帧长度的模化)

当然,这意味着,当您想要读取或使用数据帧时,您需要记住,它只按时间顺序分为两个块:一个块到计数器(旧数据),另一个块包括计数器(旧数据)。这可能会使一些计算变得有点棘手,但在大多数情况下,如果您需要性能,这可能是值得的。

谢谢! 最终得到了这个快速解决方案: 更新索引值、排序索引、更新行值

if len(df_ohlc_OTF.index)>500: # rotate or append
   df_ohlc_OTF.rename(index={df_ohlc_OTF.index[0]:latest_OTF_candle.index[-1]}, inplace=True)
   df_ohlc_OTF.sort_index(inplace=True)
   df_ohlc_OTF.iloc[-1, [high, low, open, close]] = latest_OTF_candle.iloc[-1, [high, low, open, close]]