我正在尝试创建一个“工作日”列,根据它是工作日还是假日,将日期范围标记为“真”或“假”。如果是工作日且不是假期,则将其视为“工作日”,否则就不是工作日。
一切似乎都按预期进行,直到最后一行。我创建了名为“工作日”的新列,将值填充为“工作日”中的值,但是当我将“工作日”中的值替换为 false 时,“假日”为 True,它似乎没有做任何事。
我哪里出错了?另外,如果您对简化我的代码有任何想法,请告诉我,我显然是初学者。 :) 任何帮助表示赞赏!
import pandas as pd
import numpy as np
from datetime import datetime
from pandas.tseries.holiday import USFederalHolidayCalendar as holidaylist
datelist = pd.date_range(start='2018-08-01', end=datetime.today())
bizdaylist = pd.date_range(start='2018-08-01', end=datetime.today(), freq='B')
df1_columns = ['date']
df1 = pd.DataFrame(datelist, columns = df1_columns)
df2_columns = ['date']
df2 = pd.DataFrame(bizdaylist, columns = df2_columns)
df1 = df1.assign(weekday=df1.date.isin(df2.date).astype(str))
df3 = pd.DataFrame()
df3['Date'] = datelist
hl = holidaylist()
holidays = hl.holidays(start=datelist.min(), end=datelist.max())
df1['holiday'] = df3['Date'].isin(holidays)
df1['workday'] = np.where(df1.holiday == 'FALSE', df1.holiday, df1.weekday)
print(df1.loc[877:884])
数据帧索引 877-884:
答案 0 :(得分:0)
工作日查询不正确。
你需要把它改成
df1['workday'] = np.where((df1.weekday == 'False') | (df1.holiday == True), False, True)
此外,该值存储为 False
而不是 FALSE
。所以你的支票必须完全匹配。
您将工作日作为对象,因为您将其转换为 astype(str)。所以你需要检查'False'的字符串值
如果不是工作日或假日,则值为 False。否则它必须是 True。