Salario Más Alto por Departamento

Tabla: Employee

+--------------+---------+
| Column Name  | Type    |
+--------------+---------+
| id           | int     |
| name         | varchar |
| salary       | int     |
| departmentId | int     |
+--------------+---------+

- "id" es la clave primaria para esta tabla.
- "departmentId" es una clave foránea del ID de la tabla Department.
- Cada fila de esta tabla contiene el ID, nombre, y salario de un empleado.
- También contiene el ID de su departamento.

Tabla: Department

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| id          | int     |
| name        | varchar |
+-------------+---------+

- "id" es la clave primaria de esta tabla.
- Se garantiza que el nombre del departamento no es NULL.
- Cada fila de esta tabla indica el ID de un departamento y su nombre.

Escribe una solución para encontrar los empleados que tienen el salario más alto en cada uno de los departamentos.

Devuelve la tabla resultado en cualquier orden.

Ejemplo

Input:

tabla 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            |
+----+-------+--------+--------------+

tabla Department:
+----+-------+
| id | name  |
+----+-------+
| 1  | IT    |
| 2  | Sales |
+----+-------+

Output:

+------------+----------+--------+
| Department | Employee | Salary |
+------------+----------+--------+
| IT         | Jim      | 90000  |
| Sales      | Henry    | 80000  |
| IT         | Max      | 90000  |
+------------+----------+--------+

Explicación: 
Max y Jim ambos tienen el salario
más alto en el departamento de IT, 
y Henry tiene el salario más alto 
en el departamenteo de Sales.

Soluciones

import pandas as pd

def department_highest_salary(employee: pd.DataFrame, department: pd.DataFrame) -> pd.DataFrame:
    result = employee.merge(department, left_on='departmentId', right_on='id')
    
    max_salaries = result.groupby('departmentId')['salary'].transform('max')
    result = result[result['salary'] == max_salaries]
    
    return result[['name_y', 'name_x', 'salary']].rename(columns={
        'name_y': 'Department',
        'name_x': 'Employee',
        'salary': 'Salary'
    })