Solution with groupby() and .transform(). Based on the response in this thread,
"As a general rule when using groupby(), if you use the .transform()
function pandas will return a table with the same length as your
original. When you use other functions like .sum() or .first() then
pandas will return a table where each row is a group."
With that as a way to move forward, I was able to get the right solution.
df['target_days'] = df.groupby('month_start_date')['workday'].transform('sum')
The output of this is correct. The sample for month 2021-01-01 shows:
date weekday holiday workday month_start_date target_days
884 2021-01-01 True True False 2021-01-01 8
885 2021-01-02 False False False 2021-01-01 8
886 2021-01-03 False False False 2021-01-01 8
887 2021-01-04 True False True 2021-01-01 8
888 2021-01-05 True False True 2021-01-01 8
889 2021-01-06 True False True 2021-01-01 8
890 2021-01-07 True False True 2021-01-01 8
891 2021-01-08 True False True 2021-01-01 8
892 2021-01-09 False False False 2021-01-01 8
893 2021-01-10 False False False 2021-01-01 8
894 2021-01-11 True False True 2021-01-01 8
895 2021-01-12 True False True 2021-01-01 8
896 2021-01-13 True False True 2021-01-01 8
The first 100 rows have correct value count for holiday = True
:
date weekday holiday workday month_start_date target_days
0 2018-08-01 True False True 2018-08-01 23
1 2018-08-02 True False True 2018-08-01 23
2 2018-08-03 True False True 2018-08-01 23
3 2018-08-04 False False False 2018-08-01 23
4 2018-08-05 False False False 2018-08-01 23
5 2018-08-06 True False True 2018-08-01 23
6 2018-08-07 True False True 2018-08-01 23
7 2018-08-08 True False True 2018-08-01 23
8 2018-08-09 True False True 2018-08-01 23
9 2018-08-10 True False True 2018-08-01 23
10 2018-08-11 False False False 2018-08-01 23
11 2018-08-12 False False False 2018-08-01 23
12 2018-08-13 True False True 2018-08-01 23
13 2018-08-14 True False True 2018-08-01 23
14 2018-08-15 True False True 2018-08-01 23
15 2018-08-16 True False True 2018-08-01 23
16 2018-08-17 True False True 2018-08-01 23
17 2018-08-18 False False False 2018-08-01 23
18 2018-08-19 False False False 2018-08-01 23
19 2018-08-20 True False True 2018-08-01 23
20 2018-08-21 True False True 2018-08-01 23
21 2018-08-22 True False True 2018-08-01 23
22 2018-08-23 True False True 2018-08-01 23
23 2018-08-24 True False True 2018-08-01 23
24 2018-08-25 False False False 2018-08-01 23
25 2018-08-26 False False False 2018-08-01 23
26 2018-08-27 True False True 2018-08-01 23
27 2018-08-28 True False True 2018-08-01 23
28 2018-08-29 True False True 2018-08-01 23
29 2018-08-30 True False True 2018-08-01 23
30 2018-08-31 True False True 2018-08-01 23
31 2018-09-01 False False False 2018-09-01 19
32 2018-09-02 False False False 2018-09-01 19
33 2018-09-03 True True False 2018-09-01 19
34 2018-09-04 True False True 2018-09-01 19
35 2018-09-05 True False True 2018-09-01 19
36 2018-09-06 True False True 2018-09-01 19
37 2018-09-07 True False True 2018-09-01 19
38 2018-09-08 False False False 2018-09-01 19
39 2018-09-09 False False False 2018-09-01 19
40 2018-09-10 True False True 2018-09-01 19
41 2018-09-11 True False True 2018-09-01 19
42 2018-09-12 True False True 2018-09-01 19
43 2018-09-13 True False True 2018-09-01 19
44 2018-09-14 True False True 2018-09-01 19
45 2018-09-15 False False False 2018-09-01 19
46 2018-09-16 False False False 2018-09-01 19
47 2018-09-17 True False True 2018-09-01 19
48 2018-09-18 True False True 2018-09-01 19
49 2018-09-19 True False True 2018-09-01 19
50 2018-09-20 True False True 2018-09-01 19
51 2018-09-21 True False True 2018-09-01 19
52 2018-09-22 False False False 2018-09-01 19
53 2018-09-23 False False False 2018-09-01 19
54 2018-09-24 True False True 2018-09-01 19
55 2018-09-25 True False True 2018-09-01 19
56 2018-09-26 True False True 2018-09-01 19
57 2018-09-27 True False True 2018-09-01 19
58 2018-09-28 True False True 2018-09-01 19
59 2018-09-29 False False False 2018-09-01 19
60 2018-09-30 False False False 2018-09-01 19
61 2018-10-01 True False True 2018-10-01 22
62 2018-10-02 True False True 2018-10-01 22
63 2018-10-03 True False True 2018-10-01 22
64 2018-10-04 True False True 2018-10-01 22
65 2018-10-05 True False True 2018-10-01 22
66 2018-10-06 False False False 2018-10-01 22
67 2018-10-07 False False False 2018-10-01 22
68 2018-10-08 True True False 2018-10-01 22
69 2018-10-09 True False True 2018-10-01 22
70 2018-10-10 True False True 2018-10-01 22
71 2018-10-11 True False True 2018-10-01 22
72 2018-10-12 True False True 2018-10-01 22
73 2018-10-13 False False False 2018-10-01 22
74 2018-10-14 False False False 2018-10-01 22
75 2018-10-15 True False True 2018-10-01 22
76 2018-10-16 True False True 2018-10-01 22
77 2018-10-17 True False True 2018-10-01 22
78 2018-10-18 True False True 2018-10-01 22
79 2018-10-19 True False True 2018-10-01 22
80 2018-10-20 False False False 2018-10-01 22
81 2018-10-21 False False False 2018-10-01 22
82 2018-10-22 True False True 2018-10-01 22
83 2018-10-23 True False True 2018-10-01 22
84 2018-10-24 True False True 2018-10-01 22
85 2018-10-25 True False True 2018-10-01 22
86 2018-10-26 True False True 2018-10-01 22
87 2018-10-27 False False False 2018-10-01 22
88 2018-10-28 False False False 2018-10-01 22
89 2018-10-29 True False True 2018-10-01 22
90 2018-10-30 True False True 2018-10-01 22
91 2018-10-31 True False True 2018-10-01 22