【问题标题】:Pandas Dataframe, assign values to day of the week. Feature extractionPandas Dataframe,将值分配给星期几。特征提取
【发布时间】:2017-01-12 21:22:45
【问题描述】:

我正在提取特征来查找工作日。我到目前为止是这样的:

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')

此代码会将 Mon-Fri 分配为 1,将 Sat-Sun 分配为 0。但是,我想为工作日分配不同的值。例如,Mon = 1、Tues = 2、Wed = 3、Thurs = 4、Fri = 5 和 Sat 和 Sun 都应该等于 0。

任何帮助将不胜感激。

【问题讨论】:

    标签: python pandas numpy multiple-columns dayofweek


    【解决方案1】:

    我觉得你可以用mask:

    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
    

    【讨论】:

    • 非常感谢您的回复。这对我帮助很大!
    • 如果我或其他答案有帮助,请不要忘记accept。谢谢。很遗憾,只能接受一个答案。
    【解决方案2】:

    好的,我认为这里最简单的方法是使用np.where 来测试工作日是否大于或等于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
    

    【讨论】:

    • 非常感谢您的回复。但是,有没有办法使用我最初的方法解决上述问题?
    • 查看修改后的答案
    猜你喜欢
    • 2021-04-12
    • 1970-01-01
    • 2022-07-07
    • 2019-07-24
    • 1970-01-01
    • 2022-01-18
    • 2011-03-02
    • 2019-02-06
    • 2020-01-21
    相关资源
    最近更新 更多