方法一:
将df['Date'] 转换为字符串,然后再将其传递给np.is_busday:
df['Is_Business_Day'] = [np.is_busday(x) for x in df['Date'].astype(str)]
方法二:
您可以只使用pandas 而不是numpy,并检查Date 是否在从最短日期到最长日期的工作日范围内:
bus_days = pd.bdate_range(df['Date'].min(), df['Date'].max())
df['Is_Business_Day'] = df['Date'].isin(bus_days)
示例:
>>> df = pd.DataFrame({'Date':pd.date_range(pd.to_datetime('today'), pd.to_datetime('2018-09-15'))})
>>> df
Date
0 2018-08-29
1 2018-08-30
2 2018-08-31
3 2018-09-01
4 2018-09-02
5 2018-09-03
6 2018-09-04
7 2018-09-05
8 2018-09-06
9 2018-09-07
10 2018-09-08
11 2018-09-09
12 2018-09-10
13 2018-09-11
14 2018-09-12
15 2018-09-13
16 2018-09-14
17 2018-09-15
你可以这样做:
方法一:
>>> df['Is_Business_Day'] = [np.is_busday(x) for x in df['Date'].astype(str)]
>>> df
Date Is_Business_Day
0 2018-08-29 True
1 2018-08-30 True
2 2018-08-31 True
3 2018-09-01 False
4 2018-09-02 False
5 2018-09-03 True
6 2018-09-04 True
7 2018-09-05 True
8 2018-09-06 True
9 2018-09-07 True
10 2018-09-08 False
11 2018-09-09 False
12 2018-09-10 True
13 2018-09-11 True
14 2018-09-12 True
15 2018-09-13 True
16 2018-09-14 True
17 2018-09-15 False
方法二:
>>> bus_days = pd.bdate_range(df['Date'].min(), df['Date'].max())
>>> df['Is_Business_Day'] = df['Date'].isin(bus_days)
>>> df
Date Is_Business_Day
0 2018-08-29 True
1 2018-08-30 True
2 2018-08-31 True
3 2018-09-01 False
4 2018-09-02 False
5 2018-09-03 True
6 2018-09-04 True
7 2018-09-05 True
8 2018-09-06 True
9 2018-09-07 True
10 2018-09-08 False
11 2018-09-09 False
12 2018-09-10 True
13 2018-09-11 True
14 2018-09-12 True
15 2018-09-13 True
16 2018-09-14 True
17 2018-09-15 False