[英]Change pandas dataframe column values based on other columns in dataframe
我正在尝试创建一个“工作日”列,根据它是工作日还是假期,将日期范围标记为“真”或“假”。 如果它是工作日而不是假期,那么它被认为是“工作日”,否则不是工作日。
直到最后一行,一切似乎都按预期进行。 我创建了名为“工作日”的新列,将值填充为“工作日”中的任何内容,但是当我 go 将“工作日”中的值替换为“假期”为真时,它似乎不是做任何事。
我在哪里错了? 另外,如果您对简化我的代码有任何想法,请告诉我,我显然是初学者。 :) 任何帮助表示赞赏!
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])
dataframe索引877-884:
工作日查询不正确。
您需要将其更改为
df1['workday'] = np.where((df1.weekday == 'False') | (df1.holiday == True), False, True)
此外,该值存储为False
而不是FALSE
。 所以你的支票必须完全匹配。
您将工作日作为 object,因为您将其转换为 astype(str)。 所以你需要检查'False'的字符串值
如果不是工作日或假日,则该值为 False。 否则它必须为真。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.