Фрейм данных Pandas — Получить дату начала и дату окончания заданного диапазона дат NYSE

#python-3.x #pandas #dataframe #date #vectorization

#python-3.x #панды #фрейм данных #Дата #векторизация

Вопрос:

Я хочу найти минимальную и максимальную дату открытия рынка NYSE с учетом диапазона дат.

Фиктивные данные могут быть сгенерированы с помощью приведенного ниже кода:

 data = {'Date': ['2021-11-04', '2021-07-29', '2021-04-29', '2021-01-19', '2020-10-22'],  'Symbol': ['A', 'A', 'A', 'A', 'A']} df = pd.DataFrame(data)  

Из столбца даты приведенного выше фрейма данных я вычитал и добавил месяц, используя приведенный ниже код:

 df['from_date'] = df['date'] - DateOffset(months=1) df['to_date'] = df['date']   DateOffset(months=1)  

Фактический DF:

  ------------ -------- ------------ ------------  | date | symbol | from_date | to_date |  ------------ -------- ------------ ------------  | 2021-11-04 | A | 2021-10-04 | 2021-12-04 | | 2021-07-29 | A | 2021-06-29 | 2021-08-29 | | 2021-04-29 | A | 2021-03-29 | 2021-05-29 | | 2021-01-19 | A | 2020-12-19 | 2021-02-19 | | 2020-10-22 | A | 2020-09-22 | 2020-11-22 |  ------------ -------- ------------ ------------   

Я хочу добавить два столбца в вышеприведенный valid_from_date valid_to_date фрейм данных, который ищет действительную дату и дату, основанную на том, когда открыт рынок NYSE.

Таким образом, для первой строки мы можем рассчитать, используя следующий код:

 import pandas_market_calendars as mcal nyse = mcal.get_calendar('NYSE') valid_from_date = nyse.valid_days(start_date='2021-10-04', end_date='2021-12-04').min() valid_to_date = nyse.valid_days(start_date='2021-10-04', end_date='2021-12-04').max()  

Желаемый Результат:

Векторизованный подход для применения вышеуказанного метода к столбцам from_date и to_date .

Попытка Подхода:

Ниже приведен код, который я попытался выполнить, но не сработал.

 df['valid_from_date'] = nyse.valid_days(df['from_date'], df['to_date']).min() df['valid_to_date'] = nyse.valid_days(df['from_date'], df['to_date']).max()  

Ожидаемый DF:

  ------------ -------- ------------ ------------ ----------------- ---------------  | date | symbol | from_date | to_date | valid_from_date | valid_to_date |  ------------ -------- ------------ ------------ ----------------- ---------------  | 2021-11-04 | A | 2021-10-04 | 2021-12-04 | 2021-10-04 | 2021-12-03 | | 2021-07-29 | A | 2021-06-29 | 2021-08-29 | 2021-06-29 | 2021-08-27 | | 2021-04-29 | A | 2021-03-29 | 2021-05-29 | 2021-03-29 | 2021-05-28 | | 2021-01-19 | A | 2020-12-19 | 2021-02-19 | 2020-12-21 | 2021-02-19 | | 2020-10-22 | A | 2020-09-22 | 2020-11-22 | 2020-09-22 | 2020-11-20 |  ------------ -------- ------------ ------------ ----------------- ---------------