У меня есть датафрейм в соответствии с приведенными ниже линиями для анализа данных о запасах:
timestamp Price Exit Price
1 2019-09-29 15:33:00 14
2 2019-09-29 15:34:00 15
3 2019-09-29 15:35:00 14
4 2019-09-29 15:36:00 17
5 2019-09-29 15:37:00 20
Я пытаюсь протестировать стратегию, поэтому хочу заполнить столбец цены выхода с последующимзначение столбца цены, когда выполняется первая строка с любым из следующих условий:
- Разница во времени между отметкой времени текущей строки и отметкой времени сравнения больше или равна X минутам.
- Разница в процентах между текущей ценой строки и ценой строки сравнения больше, чем Y процентов
Так, например, если число минут равно 2, а возврат равен 10%, таблица должна быть заполненаследующим образом:
timestamp Price Exit Price
1 2019-09-29 15:33:00 14 14<-- From Row 3 because 2 minutes passed
2 2019-09-29 15:34:00 15 17<-- From Row 4, both conditions satisfied
3 2019-09-29 15:35:00 14 17<-- From Row 4, difference greater than 10%
4 2019-09-29 15:36:00 17 20
5 2019-09-29 15:37:00 20 Nan
Я думал о реализации решения, подобного этому:
customFilter(row):
results = df[
(df['timestamp'] > row['timestamp']) &
(
(df['timestamp'] <= (row['timestamp']+pd.timedelta('2m')) |
(df['price'] > row['price']*1.1)
)
]
if results.shape[0] > 0:
return results['price'].first()
return nan
df['Exit Price'] = df.apply(lambda x: customFilter(x), axis = 1)
Вопрос в том, есть ли лучший способ сделать это? Это не самый эффективный или быстрый способ, особенно если я увеличу размер своего набора данных.