Код:
forecast ['conus_days'] = np.where(forecast['Month']==forecast["conus_mth"],
(forecast['Start Date'] - forecast['start_month'].apply(us_bd)),
0)
forecast['conus_days']=forecast['conus_days'].dt.days
forecast ['conus_days1'] = np.where(forecast['Month']==forecast["conus_mth"],
forecast['end_month'] - forecast['Start Date'],
0)
forecast['conus_days1']=forecast['conus_days1'].dt.days
forecast['oconus_days'] = np.where(forecast['Month']==forecast['oconus_mth'],
(forecast['End Date'] - forecast['start_month']),
0)
forecast['oconus_days']=forecast['oconus_days'].dt.days
forecast['oconus_days1']= np.where(forecast['Month']== forecast["oconus_mth"],
(forecast['end_month']- forecast['End Date'].apply(us_bd)),0)
Результат:
Name EID Start Date End Date Country year Month \
0 GP 123456 2019-08-01 2020-01-03 Afghanistan 2020 1
1 MW 3456789 2019-09-22 2020-02-16 Conus 2020 1
2 MH 456789 2019-12-05 2020-03-12 Conus 2020 1
3 DR 789456 2019-09-11 2020-03-04 Iraq 2020 1
4 JR 985756 2020-01-03 2020-05-06 Germany 2020 1
days_in_month start_month end_month working_days conus_mth oconus_mth \
0 31 2020-01-01 2020-01-31 21 8 1
1 31 2020-01-01 2020-01-31 21 9 2
2 31 2020-01-01 2020-01-31 21 12 3
3 31 2020-01-01 2020-01-31 21 9 3
4 31 2020-01-01 2020-01-31 21 1 5
conus_days conus_days1 oconus_days oconus_days1
0 0 0 2 25
1 0 0 0 0
2 0 0 0 0
3 0 0 0 0
4 1 28 0 0
строка 0, oconus_days1
вывод должен быть 20, а НЕ 25.
с использованием us_bd = CustomBusinessDay(calendar=USFederalHolidayCalendar())
для рассчитать количество рабочих дней между датами, исключая праздничные и выходные дни - так же, как столбец conus_days = 1, это правильно. Если вы посмотрите на функцию np.where .... forecast['end_month'] - forecast['End Date'].apply(us_bd)
, вывод должен быть 20.