本文主要是介绍每日一题26:数据操作之部门工资最高的员工,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、每日一题
表: Employee
+--------------+---------+ | 列名 | 类型 | +--------------+---------+ | id | int | | name | varchar | | salary | int | | departmentId | int | +--------------+---------+ 在 SQL 中,id是此表的主键。 departmentId 是 Department 表中 id 的外键(在 Pandas 中称为 join key)。 此表的每一行都表示员工的 id、姓名和工资。它还包含他们所在部门的 id。
表: Department
+-------------+---------+ | 列名 | 类型 | +-------------+---------+ | id | int | | name | varchar | +-------------+---------+ 在 SQL 中,id 是此表的主键列。 此表的每一行都表示一个部门的 id 及其名称。
查找出每个部门中薪资最高的员工。
按 任意顺序 返回结果表。
查询结果格式如下例所示。
示例 1:
输入: Employee 表: +----+-------+--------+--------------+ | id | name | salary | departmentId | +----+-------+--------+--------------+ | 1 | Joe | 70000 | 1 | | 2 | Jim | 90000 | 1 | | 3 | Henry | 80000 | 2 | | 4 | Sam | 60000 | 2 | | 5 | Max | 90000 | 1 | +----+-------+--------+--------------+ Department 表: +----+-------+ | id | name | +----+-------+ | 1 | IT | | 2 | Sales | +----+-------+ 输出: +------------+----------+--------+ | Department | Employee | Salary | +------------+----------+--------+ | IT | Jim | 90000 | | Sales | Henry | 80000 | | IT | Max | 90000 | +------------+----------+--------+ 解释:Max 和 Jim 在 IT 部门的工资都是最高的,Henry 在销售部的工资最高。
解答:
import pandas as pddef department_highest_salary(employee: pd.DataFrame, department: pd.DataFrame) -> pd.DataFrame:#获取每个部门的最高薪资max_salary_per_department = employee.groupby('departmentId')['salary'].max().reset_index()max_salary_per_department.rename(columns = {'salary': 'max_salary'}, inplace = True)# 将最高薪资与员工表合并,得到每个部门中薪资最高的员工merged_df = pd.merge(employee, max_salary_per_department, how='inner',left_on=['departmentId', 'salary'],right_on=['departmentId', 'max_salary'])# 将结果与部门表合并以获取部门名称final_result = pd.merge(merged_df, department, how = 'inner', left_on = 'departmentId', right_on = 'id')# 选择需要的列并重命名final_result = final_result[['name_y', 'name_x', 'salary']]final_result.columns = ['Department', 'Employee', 'Salary']return final_result# 显示数据
employee_data = {'id':[1, 2, 3, 4, 5],'name':['Joe', 'Jim', 'Henry', 'Sam', 'Max'],'salary':[70000, 90000, 80000, 60000, 90000],'departmentId':[1, 1, 2, 2, 1]
}department_data = {'id':[1, 2],'name':['IT', 'Sales']
}# 创建 DataFrame
employee_df = pd.DataFrame(employee_data)
department_df = pd.DataFrame(department_data)# 获取每个部门中薪资最高的员工
result = department_highest_salary(employee_df, department_df)
print(result)
题源:Leetcode
二、总结
这题考察pd.merge和pd.groupby的使用,后续会出一篇关于它们的用法。
2024.5.29
这篇关于每日一题26:数据操作之部门工资最高的员工的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!