根据数据框中的其他列更改熊猫数据框列值

时间:2021-01-13 01:59:36

标签: python

我正在尝试创建一个“工作日”列,根据它是工作日还是假日,将日期范围标记为“真”或“假”。如果是工作日且不是假期,则将其视为“工作日”,否则就不是工作日。

一切似乎都按预期进行,直到最后一行。我创建了名为“工作日”的新列,将值填充为“工作日”中的值,但是当我将“工作日”中的值替换为 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:

dataframe index 877-884

1 个答案:

答案 0 :(得分:0)

工作日查询不正确。

你需要把它改成

df1['workday'] = np.where((df1.weekday == 'False') | (df1.holiday == True), False, True)

此外,该值存储为 False 而不是 FALSE。所以你的支票必须完全匹配。

您将工作日作为对象,因为您将其转换为 astype(str)。所以你需要检查'False'的字符串值

如果不是工作日或假日,则值为 False。否则它必须是 True。