どのようにすればその行が月の最後の平日だと判別できますか?
まず、対象の年月から月末日を求めてそれと一致するかを判定します。
そのあとに土日祝日かを判定すればよさそうです。
祝日かの判定はJPHolidayを利用しています。
参考:datetimeとjpholidayを組み合わせて、平日か土日祝日かを判定するスクリプト
Python
1import pandas as pd
2import jpholiday
3import datetime
4import calendar
5
6df = pd.DataFrame({'Time':['2018-02-02 05:00:00', '2018-02-28 05:00:00','2018-03-31 05:00:00','2018-04-30 05:00:00','2018-12-31 05:00:00']})
7df['Time'] = pd.to_datetime(df['Time'])
8df['Weekdays'] = df['Time'].dt.strftime('%A')
9
10def is_last_weekday(dt):
11 d_cur = dt.date()
12
13 y,m = d_cur.year,d_cur.month
14 ym = calendar.monthrange(y, m)
15 d_last = datetime.date(y, m, ym[1]) # 月末
16
17 # 月末?
18 if d_cur != d_last:
19 return 0
20
21 # 土日祝日?
22 if d_cur.weekday() >= 5 or jpholiday.is_holiday(d_cur):
23 print(d_cur, jpholiday.is_holiday_name(d_cur))
24 return 0
25
26 # 平日
27 return 1
28
29df['EOM'] = df['Time'].apply(is_last_weekday)
30print(df)
31"""
32 Time Weekdays EOM
330 2018-02-02 05:00:00 Friday 0
341 2018-02-28 05:00:00 Wednesday 1
352 2018-03-31 05:00:00 Saturday 0
363 2018-04-30 05:00:00 Monday 0
374 2018-12-31 05:00:00 Monday 1
38"""