Вы можете сделать это с некоторой агрегацией и смещением ваших временных рядов, что должно привести к более эффективным вычислениям.
Сначала агрегируйте ваши данные по closingDate
.
g = df.groupby("closingDate")
Затем вы можетесдвиньте данные в смещение на день.
shifted = g.shift(periods=1)
Это создаст новый фрейм данных, где значение Last
будет соответствовать предыдущей минуте.Теперь вы можете присоединиться к своему исходному фрейму данных на основе индекса.
df = df.merge(shifted, left_index=True, right_index=True)
Это добавит смещенные столбцы к новому фрейму данных, который можно использовать для расчета разницы.
df["Diff"] = (df["Last_x"] - df["Last_y"]) / df["Last_y"]
Теперь у вас есть все данные, которые вы ищете.Если вам нужно, чтобы каждая минута была отдельной колонкой, вы можете изменить результаты.Группируя closingDate
и затем применяя смену, вы избегаете смещения дат по дням.Если вы посмотрите на первое наблюдение каждого дня, вы получите NaN
, поскольку значения не будут смещаться в разные дни.