【问题标题】:How to flag columns with multiple conditions in pandas?如何在熊猫中标记具有多个条件的列?
【发布时间】:2019-02-07 17:27:09
【问题描述】:

我在熊猫中有以下数据框

 ID    Date         Weekday     Public_holiday      
 1     01-01-2018   Monday      0
 2     02-01-2018   Tuesday     0
 3     03-01-2018   Wednesday   1
 4     04-01-2018   Thursday    0
 5     05-01-2018   Friday      0
 6     06-01-2018   Saturday    1
 7     07-01-2018   Sunday      0

如果工作日是周一、周二、周三、周四,我想将其标记为0,但如果有公共假期,则应将其标记为31 如果工作日是Friday 但如果有公共假期则应标记为3, 2 如果有周末,但如果周末有公共假期,则应标记为 2 only

我正在关注熊猫

 m1 = df['Weekday'].isin(['Monday','Tuesday','Wednesday','Thursday'])
 m2 = df['Weekday'] == 'Friday'
 m3 = df['Public_Holiday'] == 1
 df['Flag'] = np.select([m1, m2, m3], ['0','1','2'],'3')

我想要的数据框是

ID    Date         Weekday     Public_holiday   Flag   
 1     01-01-2018   Monday      0               0
 2     02-01-2018   Tuesday     0               0  
 3     03-01-2018   Wednesday   1               3 
 4     04-01-2018   Thursday    0               0
 5     05-01-2018   Friday      0               1
 6     06-01-2018   Saturday    1               2
 7     07-01-2018   Sunday      0               2

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    这里有必要为过滤器添加条件,而不是AND链接的Public_holiday3OR链接的过滤器,也没有指定周末的默认值,因此添加到默认值:

    m1 = df['Weekday'].isin(['Monday','Tuesday','Wednesday','Thursday'])
    m2 = df['Weekday'] == 'Friday'
    m3 = df['Public_holiday'] == 1
    
    df['Flag'] = np.select([m1 & ~m3, m2 & ~m3, (m1 | m2) & m3], ['0','1','3'], default='2')
    
    print (df)
       ID        Date    Weekday  Public_holiday Flag
    0   1  01-01-2018     Monday               0    0
    1   2  02-01-2018    Tuesday               0    0
    2   3  03-01-2018  Wednesday               1    3
    3   4  04-01-2018   Thursday               0    0
    4   5  05-01-2018     Friday               0    1
    5   6  06-01-2018   Saturday               1    2
    6   7  07-01-2018     Sunday               0    2
    

    您还可以定义所有不带默认值的条件:

    m1 = df['Weekday'].isin(['Monday','Tuesday','Wednesday','Thursday'])
    m2 = df['Weekday'] == 'Friday'
    m3 = df['Public_holiday'] == 1
    m4 = df['Weekday'].isin(['Saturday','Sunday'])
    
    df['Flag'] = np.select([m1 & ~m3, (m1 | m2) & m3, m4, m2 & ~m3], ['0','3','2','1'])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-22
      • 2020-07-29
      • 2020-04-27
      • 1970-01-01
      • 1970-01-01
      • 2020-01-11
      • 2018-06-28
      • 2019-12-20
      相关资源
      最近更新 更多