Python 在数据框中,将值指定给一周中的某一天。特征提取

Python 在数据框中,将值指定给一周中的某一天。特征提取,python,pandas,numpy,multiple-columns,dayofweek,Python,Pandas,Numpy,Multiple Columns,Dayofweek,我正在提取特征以查找工作日。到目前为止,我得到的是: days = {0:'Mon', 1: 'Tues', 2:'Wed', 3:'Thurs', 4:'Fri', 5:'Sat', 6:'Sun'} data['day_of_week'] = data['day_of_week'].apply(lambda x: days[x]) data['if_Weekday'] = np.where( (data['day_of_week'] == 'Mon') | (data['day_of_wee

我正在提取特征以查找工作日。到目前为止,我得到的是:

days = {0:'Mon', 1: 'Tues', 2:'Wed', 3:'Thurs', 4:'Fri', 5:'Sat', 6:'Sun'}
data['day_of_week'] = data['day_of_week'].apply(lambda x: days[x])
data['if_Weekday'] = np.where( (data['day_of_week'] == 'Mon') | (data['day_of_week'] == 'Tues') | (data['day_of_week'] == 'Wed') | (data['day_of_week'] == 'Thurs') | (data['day_of_week'] == 'Friday'), '1', '0')
此代码将周一至周五分配为
1
,周六至周日分配为
0
。但是,我希望为工作日指定不同的值。例如,周一=1,周二=2,周三=3,周四=4,周五=5,周六和周日都应该等于0


任何帮助都将不胜感激

好的,我认为最简单的方法是使用
np。其中
测试工作日是否大于或等于5,如果是,则分配
0
,否则返回工作日值并将
1
添加到该值中:

In [21]:
df['is_weekday'] = np.where(df['weekday'] >= 5, 0, df['weekday'] + 1)
df
Out[21]:
       dates  weekday  is_weekday
0 2016-01-01        4           5
1 2016-01-02        5           0
2 2016-01-03        6           0
3 2016-01-04        0           1
4 2016-01-05        1           2
5 2016-01-06        2           3
6 2016-01-07        3           4
7 2016-01-08        4           5
8 2016-01-09        5           0
9 2016-01-10        6           0
我认为你可以使用:


非常感谢您的回复。但是,用我最初的方法是否无法解决上述问题?请参阅修订后的答案非常感谢您的回答。这对我帮助很大!如果我的答案或其他答案有用,别忘了。谢谢不幸的是,只能接受一个答案。
data = pd.DataFrame({'day_of_week':[0,1,2,3,4,5,6]})

#original column to new, add 1
data['if_Weekday'] = data['day_of_week'] + 1

#map days if necessary
days = {0:'Mon', 1: 'Tues', 2:'Wed', 3:'Thurs', 4:'Fri', 5:'Sat', 6:'Sun'}
data['day_of_week'] = data['day_of_week'].map(days)

#correct weekend days
data['if_Weekday'] = data['if_Weekday'].mask(data['if_Weekday'] >= 6, 0)

print (data)
  day_of_week  if_Weekday
0         Mon           1
1        Tues           2
2         Wed           3
3       Thurs           4
4         Fri           5
5         Sat           0
6         Sun           0