Name        date    leave   marked_leave_bfr_days
   A    8/1/2021        1                       3
   A    8/2/2021        1                       4
   A    8/3/2021        1                       5
   A    8/4/2021        1                       5
   A    8/5/2021        1                       6
   A    8/6/2021        1                       7
   A    8/7/2021        1                       8
   A    8/8/2021        0                      -1
   A    8/9/2021        0                      -1
   A   8/10/2021        1                      12
   A   8/11/2021        1                      13
   A   8/12/2021        0                      -1
   B    8/4/2021        1                       1
   B    8/5/2021        1                       1
   B    8/6/2021        1                       3
   B    8/7/2021        0                      -1
   B    8/8/2021        0                      -1
   B    8/9/2021        0                      -1
   B   8/10/2021        0                      -1
   B   8/11/2021        0                      -1
My df is like above. Name is employee code, leave is boolean (=1 means leave, =0 means no leave), marked_leave_bfr_days is how many days prior to date was leave applied.
I wish to transform it to this df:
Name        date    leave   marked_leave_bfr_days   leave_applied   leave_start   leave_end no_of_leaves
   A    8/1/2021        1                       3       7/29/2021      8/1/2021    8/3/2021            3
   A    8/2/2021        1                       4       7/29/2021      8/1/2021    8/3/2021            3
   A    8/3/2021        1                       5       7/29/2021      8/1/2021    8/3/2021            3
   A    8/4/2021        1                       5       7/30/2021      8/4/2021    8/7/2021            4
   A    8/5/2021        1                       6       7/30/2021      8/4/2021    8/7/2021            4
   A    8/6/2021        1                       7       7/30/2021      8/4/2021    8/7/2021            4
   A    8/7/2021        1                       8       7/30/2021      8/4/2021    8/7/2021            4
   A    8/8/2021        0                      -1              -1            -1          -1           -1
   A    8/9/2021        0                      -1              -1            -1          -1           -1
   A   8/10/2021        1                      12       7/29/2021     8/10/2021   8/11/2021            2
   A   8/11/2021        1                      13       7/29/2021     8/10/2021   8/11/2021            2
   A   8/12/2021        0                      -1              -1            -1          -1           -1
   B    8/4/2021        1                       1        8/3/2021      8/4/2021    8/4/2021            1
   B    8/5/2021        1                       1        8/4/2021      8/5/2021    8/5/2021            1
   B    8/6/2021        1                       3        8/3/2021      8/6/2021    8/6/2021            1
   B    8/7/2021        0                      -1              -1            -1          -1           -1
   B    8/8/2021        0                      -1              -1            -1          -1           -1
   B    8/9/2021        0                      -1              -1            -1          -1           -1
   B   8/10/2021        0                      -1              -1            -1          -1           -1
   B   8/11/2021        0                      -1              -1            -1          -1           -1
I am doing this:
df.loc[df.leave==1, 'leave_applied'] = (df['date'] - df['marked_leave_bfr_days'].map(timedelta))
df = df[df.leave==1].groupby(['Name', 'leave_applied').agg({'date':['min', 'max']}).reset_index()
But, this is not working as there are two separate chunk of leaves applied on same date by User. Is there a way to work around this?
 
     
     
     
    
