pandas - эффективно вычисляет мельчайшие возвраты в виде столбцов на внутридневных данных - PullRequest
0 голосов
/ 14 декабря 2018

У меня есть DataFrame, который выглядит следующим образом:

        closingDate                Time   Last
0        1997-09-09 2018-12-13 00:00:00  1000
1        1997-09-09 2018-12-13 00:01:00  1002      
2        1997-09-09 2018-12-13 00:02:00  1001   
3        1997-09-09 2018-12-13 00:03:00  1005

Я хочу создать DataFrame с примерно 1440 столбцами, помеченными временными метками, где соответствующее ежедневное значение - это возврат за предыдущую минуту:

        closingDate            00:00:00   00:01:00   00:02:00
0        1997-09-09 2018-12-13  -0.08        0.02     -0.001    ...
1        1997-09-10 2018-12-13        ...

Моя проблема в том, что это очень большой DataFrame (несколько ГБ), и мне нужно выполнять эту операцию несколько раз.Время и эффективность памяти - это ключ, но время важнее.Есть ли какой-нибудь векторизованный встроенный метод для этого в пандах?

1 Ответ

0 голосов
/ 14 декабря 2018

Вы можете сделать это с некоторой агрегацией и смещением ваших временных рядов, что должно привести к более эффективным вычислениям.

Сначала агрегируйте ваши данные по 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, поскольку значения не будут смещаться в разные дни.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...