'Roll window worth of data up to position zero.
Save the effort of having to expensively roll at each iteration'

def _roll_data(self):

    self.buffer.values[:, :self._window, :] = self.buffer.values[:, (- self._window):, :]
    self.date_buf[:self._window] = self.date_buf[(- self._window):]
    self._pos = self._window
