#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 | ------------ -------- ------------ ------------ ----------------- ---------------