这是一个棘手的问题。我有一个看起来像这样的数据框:
Employee Date Hours1 Reg OT
0 emp1 08/12/2018 10.00 8.00 2.00
1 emp1 08/13/2018 10.00 8.00 2.00
2 emp1 08/14/2018 10.00 8.00 2.00
3 emp1 08/15/2018 10.00 8.00 2.00
4 emp1 08/17/2018 10.00 8.00 2.00
5 emp2 08/12/2018 7.00 7.00 0.00
6 emp2 08/13/2018 9.00 8.00 1.00
7 emp2 08/15/2018 10.00 8.00 2.00
8 emp2 08/17/2018 10.00 8.00 2.00
9 emp2 08/18/2018 8.00 8.00 0.00
我要做的是计算加州员工的加班时间。加州法律规定,一天中超过8小时和/或一周中超过40小时的任何事情都被视为加班。
Hours1
=当天的总工作时间。Reg = np.where((df['Hours1']) < 8, df['Hours1'], (df['OT']))
(常规时间)OT = np.where((df['Hours1']) > 8, (df['Hours1']) - 8, (df['OT']))
(旧时)当员工一周工作40个小时以上并且一天工作超过8个小时时,就会出现此问题。我很难将两个公式结合起来。如您所见,
emp1
在前4天工作了40个小时,因此row=4
中的所有小时都应视为加班。对于每个日期,我想对每个雇员加
Hours1
下的所有小时,并且当金额> = 40时,所有后续小时均视为加班,对于该雇员,不再将其视为正常时间。感觉每个员工的每一行都应该有一个循环,其中包含该表达式,但是我尝试过的所有方法都无效。Ouput应该这样:
Employee Date Hours1 Reg OT
0 emp1 08/12/2018 10.00 8.00 2.00
1 emp1 08/13/2018 10.00 8.00 2.00
2 emp1 08/14/2018 10.00 8.00 2.00
3 emp1 08/15/2018 10.00 8.00 2.00
4 emp1 08/17/2018 10.00 0.00 10.00
5 emp2 08/12/2018 7.00 7.00 0.00
6 emp2 08/13/2018 9.00 8.00 1.00
7 emp2 08/15/2018 10.00 8.00 2.00
8 emp2 08/17/2018 10.00 8.00 2.00
9 emp2 08/18/2018 8.00 4.00 4.00
任何和所有帮助表示赞赏。
对于以后的读者来说,方程式的关键是
cumsum
。最终代码如下所示(注意:我放弃了注册时间):df['Cum hours'] = df.groupby('Employee')['Hours1'].transform('cumsum')
df['Week OT'] = np.where(df['Cum hours'] - df['Hours1'] > 40,
df['Hours1'],
df['Cum hours'] - 40)
df['OT'] = np.where(df['Cum hours'] > 40,
df['Week OT'],
df['OT'])
df = df.loc[:, ['Employee', 'Date', 'Hours1', 'OT']]
最佳答案
假设数据框仅包含一周内的数据,请执行以下操作:
cumulative_hours = df.groupby('Employee')['Hours1'].cumsum()
ot_within_day = df.OT
ot_within_week = np.where(cumulative_hours - df.Hours1 > 40,
df.Hours1,
cumulative_hours - 40)
ot_CA = np.where(cumulative_hours > 40,
ot_within_week,
ot_within_day)
关于python - 如何在数据框中计算每日和每周的加类时间?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52239093/