每日一题34:数据分组之查找每个员工花费的总时间

一、每日一题

表: Employees

+-------------+------+
| Column Name | Type |
+-------------+------+
| emp_id      | int  |
| event_day   | date |
| in_time     | int  |
| out_time    | int  |
+-------------+------+
在 SQL 中,(emp_id, event_day, in_time) 是这个表的主键。
该表显示了员工在办公室的出入情况。
event_day 是此事件发生的日期,in_time 是员工进入办公室的时间,而 out_time 是他们离开办公室的时间。
in_time 和 out_time 的取值在1到1440之间。
题目保证同一天没有两个事件在时间上是相交的,并且保证 in_time 小于 out_time。

计算每位员工每天在办公室花费的总时间(以分钟为单位)。 请注意,在一天之内,同一员工是可以多次进入和离开办公室的。 在办公室里一次进出所花费的时间为out_time 减去 in_time。

返回结果表单的顺序无要求。
查询结果的格式如下:

示例 1:

输入:
Employees table:
+--------+------------+---------+----------+
| emp_id | event_day  | in_time | out_time |
+--------+------------+---------+----------+
| 1      | 2020-11-28 | 4       | 32       |
| 1      | 2020-11-28 | 55      | 200      |
| 1      | 2020-12-03 | 1       | 42       |
| 2      | 2020-11-28 | 3       | 33       |
| 2      | 2020-12-09 | 47      | 74       |
+--------+------------+---------+----------+
输出:
+------------+--------+------------+
| day        | emp_id | total_time |
+------------+--------+------------+
| 2020-11-28 | 1      | 173        |
| 2020-11-28 | 2      | 30         |
| 2020-12-03 | 1      | 41         |
| 2020-12-09 | 2      | 27         |
+------------+--------+------------+
解释:
雇员 1 有三次进出: 有两次发生在 2020-11-28 花费的时间为 (32 - 4) + (200 - 55) = 173, 有一次发生在 2020-12-03 花费的时间为 (42 - 1) = 41。
雇员 2 有两次进出: 有一次发生在 2020-11-28 花费的时间为 (33 - 3) = 30,  有一次发生在 2020-12-09 花费的时间为 (74 - 47) = 27。

解答:

import pandas as pd

def total_time(employees: pd.DataFrame) -> pd.DataFrame:
    employees['total_time'] = employees['out_time'] - employees['in_time']
    result = employees.groupby(['event_day', 'emp_id'])['total_time'].sum().reset_index()
    result = result.rename(columns = {'event_day': 'day'})
    result = result[['day', 'emp_id', 'total_time']]
    return result

题源:Leetcode 

二、总结

这里需要注意的是reset_index(),代码中通过聚类然后进行sum()操作,为了避免将原索引并入内容中,故进行reset_index()使得索引还是原来的索引。

换句话说,在上面的代码中,进行聚合操作后,可能会产生层次化的索引,其中 “event_day” 和 “emp_id” 可能会成为索引的一部分。

2024.6.6

相关推荐

  1. 每日36数据分组科目种类数量

    2024-06-06 23:40:05       31 阅读
  2. 每日38数据分组订单最多客户

    2024-06-06 23:40:05       36 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-06 23:40:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-06 23:40:05       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-06 23:40:05       82 阅读
  4. Python语言-面向对象

    2024-06-06 23:40:05       91 阅读

热门阅读

  1. 为什么RPC要比Http高效?

    2024-06-06 23:40:05       34 阅读
  2. ES6面试题

    2024-06-06 23:40:05       29 阅读
  3. web前端三大主流框架

    2024-06-06 23:40:05       29 阅读
  4. springboot,配置类加载过程

    2024-06-06 23:40:05       31 阅读
  5. 跨境项目的SaaS实现:根据语言区分

    2024-06-06 23:40:05       33 阅读
  6. 卷积池化尺寸计算公式

    2024-06-06 23:40:05       37 阅读
  7. linux中的“->“符号

    2024-06-06 23:40:05       28 阅读
  8. vscode远程登录ubuntu linux报错,一直输入密码问题

    2024-06-06 23:40:05       26 阅读
  9. TensorRT教程(1)初探TensorRT

    2024-06-06 23:40:05       31 阅读
  10. Docker迁移默认存储目录(GPT-4o)

    2024-06-06 23:40:05       30 阅读
  11. 常见的项目模块以及项目流程

    2024-06-06 23:40:05       22 阅读