当前位置: 首页 > news >正文

每日一题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 pddef 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

http://www.lryc.cn/news/365153.html

相关文章:

  • 语言模型解构——Tokenizer
  • 前端经验:导出表格为excel并设置样式
  • UFS协议—新手快速入门(二)【5-6】
  • 手机建站介绍
  • windows11 安装cnpm 报错 Error: EPERM: operation not permitted 没权限
  • SQL 如何获取A列相同但是B列不同的数据项
  • 如何在QGIS中加载高清卫星影像?
  • 后端返回图片格式乱码
  • C++基础编程100题-025 OpenJudge-1.4-05 整数大小比较
  • [office] 16种常见的COUNTIF函数公式设置 #笔记#职场发展
  • spring boot2.7.x遇到问题
  • Webpack 开发快速入门
  • AI时代的多维探索
  • 您的游戏端被攻击了怎么办,德迅云安全的应用加速来帮您
  • 关于利用hashcat破解WiFi数据包的操作记录
  • 伯克希尔·哈撒韦:“股神”的“登神长阶”
  • f1c100s 荔枝派 系统移植
  • EtherCAT 和 UDP 通讯的实时性 区别
  • 山东大学软件学院项目实训-创新实训-基于大模型的旅游平台(二十八)- 微服务(8)
  • 如何将 MySQL 数据库共享给他人?
  • netty-学习
  • 无线和移动网络
  • 快团团账号被封,大团长帮卖团长如何避免违规操作
  • Github Copilot登录账号,完美支持chat
  • Ubuntu系统中Apache Web服务器的配置与实战
  • 如何在路由器上安装代理服务:详细教程
  • JavaScript html css前端 日期对象 date对象 日期格式化 时间戳
  • 【再探】设计模式—备忘录模式与解释器模式
  • SpringCloud网关-gateway
  • LiveData是如何感知Room数据变化的