Skip to main content
 首页 » 编程设计

python之分组和计算数据

2025年05月04日14lyhabc

我几乎是 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