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