代码之家  ›  专栏  ›  技术社区  ›  Ahamed Moosa

如果一行的条件为真,则标记整个组

  •  14
  • Ahamed Moosa  · 技术社区  · 7 年前

    Date    WeekNum Public_Holiday
    1/1/2015    1   1
    2/1/2015    1   0
    3/1/2015    1   0
    4/1/2015    1   0
    5/1/2015    1   0
    6/1/2015    1   0
    7/1/2015    1   0
    8/1/2015    2   0
    9/1/2015    2   0
    10/1/2015   2   0
    11/1/2015   2   0
    12/1/2015   2   0
    13/1/2015   2   0
    

    我必须创建一个名为public_holiday_week的条件列,如果该特定周有公共假日,它应该返回1。

    Date    WeekNum Public_Holiday  Public_Holiday_Week
    1/1/2015    1   1               1
    2/1/2015    1   0               1
    3/1/2015    1   0               1
    4/1/2015    1   0               1
    5/1/2015    1   0               1
    6/1/2015    1   0               1
    7/1/2015    1   0               1
    8/1/2015    2   0               0
    9/1/2015    2   0               0
    10/1/2015   2   0               0
    11/1/2015   2   0               0
    12/1/2015   2   0               0
    13/1/2015   2   0               0
    

    df['Public_Holiday_Week'] = np.where(df['Public_Holiday']==1,1,0)
    

    我必须在这里申请转学吗?谢谢你的帮助

    3 回复  |  直到 6 年前
        1
  •  7
  •   piRSquared    7 年前

    resample 跳过了 WeekNum

    df.assign(
        Public_Holiday_Week=
        df.resample('W-Wed', on='Date').Public_Holiday.transform('max')
    )
    
             Date  WeekNum  Public_Holiday  Public_Holiday_Week
    0  2015-01-01        1               1                    1
    1  2015-01-02        1               0                    1
    2  2015-01-03        1               0                    1
    3  2015-01-04        1               0                    1
    4  2015-01-05        1               0                    1
    5  2015-01-06        1               0                    1
    6  2015-01-07        1               0                    1
    7  2015-01-08        2               0                    0
    8  2015-01-09        2               0                    0
    9  2015-01-10        2               0                    0
    10 2015-01-11        2               0                    0
    11 2015-01-12        2               0                    0
    12 2015-01-13        2               0                    0
    
        2
  •  8
  •   jezrael    7 年前

    为了提高性能,不要使用 groupby WeekNum 1 isin ,上次将布尔值掩码强制转换为 int

    weeks = df.loc[df['Public_Holiday'].eq(1), 'WeekNum']
    df['Public_Holiday_Week'] = df['WeekNum'].isin(weeks).astype(int)
    
    print (df)
             Date  WeekNum  Public_Holiday  Public_Holiday_Week
    0    1/1/2015        1               1                    1
    1    2/1/2015        1               0                    1
    2    3/1/2015        1               0                    1
    3    4/1/2015        1               0                    1
    4    5/1/2015        1               0                    1
    5    6/1/2015        1               0                    1
    6    7/1/2015        1               0                    1
    7    8/1/2015        2               0                    0
    8    9/1/2015        2               0                    0
    9   10/1/2015        2               0                    0
    10  11/1/2015        2               0                    0
    11  12/1/2015        2               0                    0
    12  13/1/2015        2               0                    0
    

    week

    df['weeks'] = pd.to_datetime(df['Date'], dayfirst=True).dt.week
    
    weeks = df.loc[df['Public_Holiday'].eq(1), 'weeks']
    df['Public_Holiday_Week'] = df['weeks'].isin(weeks).astype(int)
    print (df)
             Date  WeekNum  Public_Holiday  weeks  Public_Holiday_Week
    0    1/1/2015        1               1      1                    1
    1    2/1/2015        1               0      1                    1
    2    3/1/2015        1               0      1                    1
    3    4/1/2015        1               0      1                    1
    4    5/1/2015        1               0      2                    0
    5    6/1/2015        1               0      2                    0
    6    7/1/2015        1               0      2                    0
    7    8/1/2015        2               0      2                    0
    8    9/1/2015        2               0      2                    0
    9   10/1/2015        2               0      2                    0
    10  11/1/2015        2               0      2                    0
    11  12/1/2015        2               0      3                    0
    12  13/1/2015        2               0      3                    0
    
        3
  •  4
  •   cs95 abhishek58g    7 年前

    groupby max map

    df['Public_Holiday_Week'] = df.WeekNum.map(df.groupby('WeekNum').Public_Holiday.max())
    print(df)
             Date  WeekNum  Public_Holiday  Public_Holiday_Week
    0    1/1/2015        1               1                    1
    1    2/1/2015        1               0                    1
    2    3/1/2015        1               0                    1
    3    4/1/2015        1               0                    1
    4    5/1/2015        1               0                    1
    5    6/1/2015        1               0                    1
    6    7/1/2015        1               0                    1
    7    8/1/2015        2               0                    0
    8    9/1/2015        2               0                    0
    9   10/1/2015        2               0                    0
    10  11/1/2015        2               0                    0
    11  12/1/2015        2               0                    0
    12  13/1/2015        2               0                    0
    

    transform 最大值

    df['Public_Holiday_Week'] = df.groupby('WeekNum').Public_Holiday.transform('max')
    

    df['Public_Holiday_Week'] = (
         df.groupby(['WeekNum', df.Date.str.split('/', 1).str[1]])
          .Public_Holiday.transform('max')
    )
    print(df)
             Date  WeekNum  Public_Holiday  Public_Holiday_Week
    0    1/1/2015        1               1                    1
    1    2/1/2015        1               0                    1
    2    3/1/2015        1               0                    1
    3    4/1/2015        1               0                    1
    4    5/1/2015        1               0                    1
    5    6/1/2015        1               0                    1
    6    7/1/2015        1               0                    1
    7    8/1/2015        2               0                    0
    8    9/1/2015        2               0                    0
    9   10/1/2015        2               0                    0
    10  11/1/2015        2               0                    0
    11  12/1/2015        2               0                    0
    12  13/1/2015        2               0                    0