我几乎是 Pandas 的新手,所以我想在开始围绕它编码之前知道某个操作是否可行。
我有一组员工工作时间的数据,像这样 (这些被过度简化了,真正的东西是成千上万条记录)
ID Name Date Hour Type
0 123 Bob 01/01/2018 09:00 In
1 123 Bob 01/01/2018 09:30 Out
2 123 Bob 01/01/2018 10:00 In
3 123 Bob 01/01/2018 12:00 Out
4 123 Bob 01/01/2018 13:00 In
5 123 Bob 01/01/2018 17:00 Out
6 456 Max 01/01/2018 09:00 In
7 456 Max 01/01/2018 12:00 Out
8 456 Max 01/01/2018 13:00 In
9 456 Max 01/01/2018 17:00 Out
10 123 Bob 02/01/2018 09:00 In
11 123 Bob 02/01/2018 09:30 Out
12 123 Bob 02/01/2018 10:00 In
13 123 Bob 02/01/2018 17:00 Out
14 456 Max 02/01/2018 10:00 In
15 456 Max 02/01/2018 17:00 Out
我知道 Python 和 Pandas 在处理数据方面有多强大,我想知道是否有办法在不经过迭代编码的情况下获得这种输出
ID Name Date HourWorked
0 123 Bob 01/01/2018 06:30
1 456 Max 01/01/2018 07:00
2 123 Bob 02/01/2018 07:30
3 456 Max 02/01/2018 07:00
最后,我需要的是(针对每个员工 ID)计算每一天的工作小时数/分钟数
我看了很多 GroupBy 的例子,但我发现了任何有用的东西。
TIA
请您参考如下方法:
将小时数转换为datetime,groupby In's and Outs' 并取差。稍后按 'ID' 和 'Date' 对差异分组求和,即
df['Hour'] = pd.to_datetime(df['Hour'])
df['diff'] = df.groupby((df['Type'] == 'In').cumsum())['Hour'].diff()
df_new = df.groupby(['ID','Name','Date'])['diff'].sum().to_frame('Hours Worked')
Hours Worked
ID Name Date
123 Bob 01/01/2018 06:30:00
02/01/2018 07:30:00
456 Max 01/01/2018 07:00:00
02/01/2018 07:00:00
