Python Pandas, найдите индекс скользящего окна – есть ли более эффективный метод?Python

Программы на Python
Ответить
Anonymous
 Python Pandas, найдите индекс скользящего окна – есть ли более эффективный метод?

Сообщение Anonymous »

У меня есть набор данных TimeStamps и цен Bid. Для каждой цены спроса я хочу создать скользящее окно из 1000 предыдущих цен предложения, найти самое высокое значение в этом окне и вернуть индекс того, где находился максимум. Индекс должен относиться к скользящему окну, поэтому это будет число от 1 до 1000.
Вот код, который я придумал, он работает:

Код: Выделить всё

df['High time'] = price_frame - ( df.index.values - df['Bid'].rolling(window=price_frame).agg(lambda x: x.index.values[np.argmax(x.values)]) )
Как уже говорилось, это работает, но крайне неэффективно: вычисление занимает около 15/20 секунд. Есть ли более эффективный способ сделать это?
Спасибо
Я ожидаю более быстрого кода, если это возможно.
Изменить: пример< /h3>
У меня есть этот фрейм данных:

Код: Выделить всё

    Timestamp   Bid
0   2023-12-01 00:00:02.033000+00:00    1.26305
1   2023-12-01 00:00:05.974000+00:00    1.26306
2   2023-12-01 00:00:07.587000+00:00    1.26305
3   2023-12-01 00:00:07.689000+00:00    1.26306
4   2023-12-01 00:00:07.792000+00:00    1.26304
... ... ...
2383418 2024-01-04 23:59:36.774000+00:00    1.26810
2383419 2024-01-04 23:59:41.153000+00:00    1.26808
2383420 2024-01-04 23:59:41.256000+00:00    1.26808
2383421 2024-01-04 23:59:55.951000+00:00    1.26805
2383422 2024-01-04 23:59:58.573000+00:00    1.26807
Для каждой строки я хочу создать скользящее окно из 1000 предыдущих цен предложения, затем найти максимальное значение этого окна и вернуть индекс, в котором было самое высокое значение.
Использование этот код:

Код: Выделить всё

df['High time'] =  price_frame - ( df.index.values - df['Bid'].rolling(window=price_frame).agg(lambda x: x.index.values[np.argmax(x.values)]) )
Получаю желаемый результат:

Код: Выделить всё

    Timestamp   Bid High time
0   2023-12-01 00:00:02.033000+00:00    1.26305 NaN
1   2023-12-01 00:00:05.974000+00:00    1.26306 NaN
2   2023-12-01 00:00:07.587000+00:00    1.26305 NaN
3   2023-12-01 00:00:07.689000+00:00    1.26306 NaN
4   2023-12-01 00:00:07.792000+00:00    1.26304 NaN
... ... ... ...
2383418 2024-01-04 23:59:36.774000+00:00    1.26810 255.0
2383419 2024-01-04 23:59:41.153000+00:00    1.26808 254.0
2383420 2024-01-04 23:59:41.256000+00:00    1.26808 253.0
2383421 2024-01-04 23:59:55.951000+00:00    1.26805 252.0
2383422 2024-01-04 23:59:58.573000+00:00    1.26807 251.0
Проблема в том, что это занимает до 20 секунд. Поэтому я хотел знать, есть ли более быстрый способ.

Подробнее здесь: https://stackoverflow.com/questions/777 ... ent-method
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»