gpt4 book ai didi

python - 计算 pandas 中每个日期员工的总工作时间

转载 作者:行者123 更新时间:2023-11-30 22:05:40 25 4
gpt4 key购买 nike

我有这样的 pandas 数据框:

Employee_id  timestamp
1 2017-06-21 04:47:45
1 2017-06-21 04:48:45
1 2017-06-21 04:49:45

对于每位员工,如果他/她在办公室,我每 1 分钟就会收到 ping 信息。我有大约 2000 个员工的 ping,我需要如下输出:

Employee_id    date           Total_work_hour
1 2018-06-21 8
1 2018-06-22 7
2 2018-06-21 6
2 2018-06-22 8

所有 2000 名员工

最佳答案

使用groupby带有 diff 的 lambda 函数计算所有差异的总和,然后通过 total_seconds 将其转换为秒然后除以 3600 得到小时:

df1 = (df.groupby(['Employee_id', df['timestamp'].dt.date])['timestamp']
.apply(lambda x: x.diff().sum())
.dt.total_seconds()
.div(3600)
.reset_index(name='Total_work_hour'))
print (df1)
Employee_id timestamp Total_work_hour
0 1 2017-06-21 0.033333

但是如果可能缺少一些连续分钟,可以使用自定义函数:

print (df)
Employee_id timestamp
0 1 2017-06-21 04:47:45
1 1 2017-06-21 04:48:45
2 1 2017-06-21 04:49:45
3 1 2017-06-21 04:55:45

def f(x):
vals = x.diff()
return vals.mask(vals > pd.Timedelta(60, unit='s')).sum()

df1 = (df.groupby(['Employee_id', df['timestamp'].dt.date])['timestamp']
.apply(f)
.dt.total_seconds()
.div(3600)
.reset_index(name='Total_work_hour')
)
print (df1)
Employee_id timestamp Total_work_hour
0 1 2017-06-21 0.033333

关于python - 计算 pandas 中每个日期员工的总工作时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52927938/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com