Resample Pandas переносит выходные в пятницу - PullRequest
1 голос
/ 06 мая 2019

У меня есть ежедневные данные OCHL, которые доступны в рабочие дни, и я пытаюсь повторно сопоставить их с 36-дневными периодами, чтобы привести их в соответствие с моим графиком.

Данные в следующем формате:

    date    open    close   high    low
0   2019-05-01 21:00:00 0.70147 0.70023 0.70292 0.69952
1   2019-04-30 21:00:00 0.70476 0.70140 0.70610 0.70074
2   2019-04-29 21:00:00 0.70554 0.70498 0.70692 0.70308
3   2019-04-28 21:00:00 0.70380 0.70564 0.70609 0.70377
4   2019-04-25 21:00:00 0.70149 0.70434 0.70613 0.70074

Я делаю ресэмплинг так:

year_resampled = df_year.resample('36B').agg({'date':'first','open':'first','close':'last','high':'max','low':'min'})

Проблема возникает, когда данные охватывают выходные; У меня есть интервал, который заканчивается в четверг. Для пятницы отсутствует значение, и функция повторной выборки извлекает данные из воскресенья, чтобы начать новый интервал. Он начинает новый интервал с воскресенья, и мне нужно изменить дату обратно на пятницу. Пример:

 [datetime.datetime(2018, 7, 23, 21, 0), 0.7379, 0.74176, 0.7434, 0.73596],
 [datetime.datetime(2018, 7, 22, 21, 0), 0.74183, 0.73812, 0.74376, 0.73718], - Sunday, new interval starts. Here I want to change date to 2018-7-20
 [datetime.datetime(2018, 7, 19, 21, 0), 0.73572, 0.74167, 0.74309, 0.73182], -- Thursday (interval ends)

Ответы [ 2 ]

1 голос
/ 06 мая 2019

Якорные смещения

По умолчанию 'W' - для недель, начинающихся с воскресенья. Вы можете изменить это, указав 'W-Fri'

df.resample('W', on='date').first()

                 date     open    close     high      low
date                                                     
2019-04-28 2019-04-25  0.70149  0.70434  0.70613  0.70074
2019-05-05 2019-04-29  0.70554  0.70498  0.70692  0.70308

Versus

df.resample('W-Fri', on='date').first()

                 date     open    close     high      low
date                                                     
2019-04-26 2019-04-25  0.70149  0.70434  0.70613  0.70074
2019-05-03 2019-04-28  0.70380  0.70564  0.70609  0.70377
0 голосов
/ 08 мая 2019

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

year_resampled = df_year.resample('36B').agg({'open':'first','close':'last','high':'max','low':'min'})

и использовал индекс для извлечения дат в список

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