Панды: выбор данных между воскресеньем 23:00- пятницей 23:00 (интервал в 1 год)

У меня есть временные ряды курса обмена евро к доллару США с мелкой детализацией, охватывающие весь 2015 год, включая неторговые дни (например, выходные), когда значение временных рядов повторяется в течение всего неторгового периода.

Мне нужно отбросить такие периоды, выбрав только данные между 23:00 воскресенья и 23:00 пятницы.

Я еще не нашел решение для Панд (я знаю, как выбирать между временами внутри дня и выбирать между днями). Я мог бы просто сдвинуть время на 1 час, а затем выбрать только рабочие дни, но это неоптимальное решение.

Есть идеи, как этого добиться?

Пример данных:

Local time,              Open,    High,    Low,     Close,   Volume
02.01.2015 22:58:00.000, 1.20008, 1.20016, 1.20006, 1.20009, 119.84
02.01.2015 22:59:00.000, 1.20009, 1.20018, 1.20004, 1.20017, 40.61
02.01.2015 23:00:00.000, 1.20017, 1.20017, 1.20017, 1.20017, 0
02.01.2015 23:01:00.000, 1.20017, 1.20017, 1.20017, 1.20017, 0
...
04.01.2015 22:58:00.000, 1.20017, 1.20017, 1.20017, 1.20017, 0
04.01.2015 22:59:00.000, 1.20017, 1.20017, 1.20017, 1.20017, 0
04.01.2015 23:00:00.000, 1.19495, 1.19506, 1.19358, 1.19410, 109.4
04.01.2015 23:01:00.000, 1.19408, 1.19414, 1.19052, 1.19123, 108.12
...

1 ответ

Решение

Рассмотреть pd.DataFramedf а также pd.tseries.index.DatetimeIndextidx

tidx = pd.date_range('2010-01-01', '2011-01-01', freq='H')
df = pd.DataFrame(np.ones((tidx.shape[0], 2)), tidx, columns=list('AB'))

мы можем построить ряд значений для фильтрации

day_hour = (((tidx.weekday + 1) % 7) * 100) + tidx.hour

определить, какие значения до 23:00 пятницы

before_friday = day_hour <= 523

А после воскресенья 23:00

after_sunday = day_hour >= 23

Фильтр наш df на основании вышеуказанных условий

df[before_friday & after_sunday]
Другие вопросы по тегам