#python #pandas #dataframe #stock
Вопрос:
У меня есть большой набор данных с ежедневными ценами акций и кодами компаний. Мне нужно вычислить 52-недельный максимум для каждой акции в каждый момент времени на основе предыдущих 52 недель. Проблема в том, что некоторые компании не обязательно располагают данными между некоторыми периодами, и поэтому, если я использую фиксированный размер окна для скользящего максимума, результаты неверны. Сначала я попробовал это:
df['52wh'] = df["PRC"].groupby(df['id']).shift(1).rolling(253).max()
Однако это не работает, так как в нем учитываются не даты, а только предыдущие 253 записи.
Я также попробовал это:
df['date'] = pd.to_datetime(df['date'])
df['52wh'] = df.set_index('date').groupby('id').rolling(window=365, freq='D', min_periods=1).max()['PRC']
Но это дает мне эту ошибку:
Ошибка значения: не удается обработать неуникальный мультииндекс!
Я думаю, что, возможно, скользящая функция с границами get могла бы сработать, но я не знаю, как написать хорошую.
Вот пример того, как выглядит фрейм данных
date id PRC
0 2010-01-09 10158 11.87
1 2010-01-10 10158 12.30
2 2010-01-11 10158 12.37
3 2010-01-12 10158 12.89
4 2010-02-08 10158 10.13
... ... ... ...
495711 2018-12-12 93188 14.48
495712 2018-12-13 93188 14.48
495713 2018-12-14 93188 14.48
495714 2018-12-17 93188 14.48
495715 2018-12-18 93188 NaN
Кто-нибудь может помочь? Заранее спасибо, ребята! 🙂
Комментарии:
1. Можете ли вы попробовать разделить свои данные на каждую акцию, а затем применить скользящий фильтр? Я предполагаю, что есть некоторые акции с одним и тем же днем, которые создают не уникальные индексы, когда вы устанавливаете идентификатор на дату. Кроме того, пожалуйста, укажите некоторые примеры данных в своем вопросе
2. Да, действительно, даты повторяются для каждой акции, так как я смотрю на них в течение определенного периода времени. Я добавил пример к вопросу. Это пример из меньшего набора данных, но фактический файл данных содержит более 1000 запасов, поэтому разделение данных на отдельные запасы было бы неэффективным, верно?
3. является ли «ИДЕНТИФИКАТОР» уникальным идентификатором акции?
4. да, это уникальный идентификатор