我正在尝试创建一个“工作日”列,根据是否为工作日以及是否为假日将日期范围标记为“真”或“假”。如果这是工作日而不是假期,则将其视为“工作日”,否则不是工作日。
一切似乎都按预期进行,直到最后一行。我创建了一个名为“ workday”的新列,将“工作日”中的值填充为值,但是当我将“ workday”中的值替换为false时,“ holiday”为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:
工作日查询不正确。
您需要将其更改为
df1['workday'] = np.where((df1.weekday == 'False') | (df1.holiday == True), False, True)
同样,该值存储为False
not FALSE
。因此,您的支票必须完全匹配。
您将工作日作为对象,因为您将其转换为astype(str)。因此,您需要检查字符串值“ False”
如果不是工作日或假日,则该值为False。否则,它必须为True。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句