pandas笔记(五)-- 部门工资最高的员工(数据表的合并与分组)

题目描述

输入employee表和department表,查询部门工资最高的员工,按任意顺序返回结果表

测试用例

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

输出:

Employee Salary Department
Jim 90000 IT
Max 90000 IT
Henry 80000 Sales

解析

问题的核心是需要将员工表中的departmentId与部门表中id键相关联,需要用到pandas中的merge函数
关于merge函数的具体定义,可以看这篇博文 https://www.cnblogs.com/guxh/p/9451532.html

思路

使用merge函数合并两张数据表,再根据部门进行分组和筛选即可得到员工数据,这里同样需要注意列的重命名问题
此外,在寻找最大工资时需要使用transform("max")而不是max,这是因为transform返回的是一个与原数据
表长度相同的Series,如果使用max函数将导致后续逻辑索引抛出ValueError

代码

import pandas as pd

def department_highest_salary(employee: pd.DataFrame, department: pd.DataFrame) -> pd.DataFrame:
    df = employee.merge(department, left_on = "departmentId", right_on = "id")
    # merge函数将自动为同名的列添加下标_x和_y来加以区分,需重命名
    df.rename(columns = {"name_x": "Employee", "name_y": "Department", "salary": "Salary"}, inplace = True)
    max_salary = df.groupby("Department")["Salary"].transform("max")
    return df[df["Salary"]==max_salary][["Employee", "Salary", "Department"]]
posted @ 2024-03-27 11:04  KevinScott0582  阅读(14)  评论(0编辑  收藏  举报