我有一个带有员工 PTO 条目的 pandas 框架:
employee_id time_off_date
1 1/1/2017
1 1/2/2017
1 1/3/2017
1 5/1/2017
2 6/1/2017
2 9/5/2017
2 9/6/2017
2 9/7/2017
2 9/8/2017
我正在尝试找出每个员工连续使用 PTO 的最长持续时间。例如,员工 #1 的最长 PTO 持续时间为 3 天(1/1/2017 至 1/3/2017),员工 #2 的最长 PTO 持续时间为 4 天(9/5/2017 至 9/8/2017)。
我对应该使用哪种 pandas groupby 和 shift 组合来回答这个问题感到困惑。
奖励积分:查找所有员工在 X 天内的所有 PTO 持续时间。
如果您有任何问题,请告诉我。
请您参考如下方法:
使用 diff与 cumsum在每个 employee_id 中创建子组,然后我们做 groupby size与 max找到最大值
s=df.groupby('employee_id').time_off_date.apply(lambda x : x.diff().dt.days.ne(1).cumsum())
df['New']=s
df.groupby(['employee_id','New']).size().max(level=0)
Out[423]:
employee_id
1 3
2 4
dtype: int64
