I'm on the last step of finishing my table, but my count is returning NaN. I'm trying to create a column target_days which groups by each value in 'month_start_date' and returns the value of the count of workday if True.
For example, each date that has a month_start_date of 2018-08-01 should return a value of 23 because there are 23 workdays in that month. Any help is appreciated!
import pandas as pd
import numpy as np
import datetime as dt
from pandas.tseries.holiday import USFederalHolidayCalendar as holidaylist
datelist = pd.date_range(start='2018-08-01', end=dt.datetime.today())
weekdaylist = pd.date_range(start='2018-08-01', end=dt.datetime.today(), freq='B')
mstartlist = (datelist + dt.timedelta(1)) + pd.tseries.offsets.MonthBegin(n=-1)
hl = holidaylist()
holidays = hl.holidays(start=datelist.min(), end=datelist.max())
df = pd.DataFrame(datelist, columns = ['date'])
df['weekday'] = df.date.isin(weekdaylist)
df['holiday'] = df.date.isin(holidays)
df['workday'] = np.where((df.weekday == False) | (df.holiday == True), False, True)
df['month_start_date'] = mstartlist
df['target_days'] = df.groupby('month_start_date')['workday'].apply(lambda x: x[x == True].count())
date weekday holiday workday month_start_date target_days
0 2018-08-01 True False True 2018-08-01 NaN
1 2018-08-02 True False True 2018-08-01 NaN
2 2018-08-03 True False True 2018-08-01 NaN
3 2018-08-04 False False False 2018-08-01 NaN
4 2018-08-05 False False False 2018-08-01 NaN