Empleados cuyo gerente dej贸 la compan铆a
Encuentre los IDs de los empleados cuyo salario es estrictamente menor a $30000 y cuyo gerente abandon贸 la compan铆a, su informaci贸n se elimina de la tabla Employees, pero los informes siguen teniendo su manager_id establecido en el gerente que se fue. Regrese el resultado ordenado por employee_id.
Tabla: Employees
+-------------+----------+
| Column Name | Type |
+-------------+----------+
| employee_id | int |
| name | varchar |
| manager_id | int |
| salary | int |
+-------------+----------+
- employee_id es la llave primaria.
- Esta tabla contiene informaci贸n de los empleados, su salario y el ID de su gerente. Algunos empleados no
tienen un gerente asignado (manager_id es null).
El formato del resultado se muestra en el siguiente ejemplo.
Ejemplo 1:
Entrada:
Tabla Employees:
+-------------+-----------+------------+--------+
| employee_id | name | manager_id | salary |
+-------------+-----------+------------+--------+
| 3 | Mila | 9 | 60301 |
| 12 | Antonella | null | 31000 |
| 13 | Emery | null | 67084 |
| 1 | Kalel | 11 | 21241 |
| 9 | Mikaela | null | 50937 |
| 11 | Joziah | 6 | 28485 |
+-------------+-----------+------------+--------+
Salida:
+-------------+
| employee_id |
+-------------+
| 11 |
+-------------+
Explicaci贸n:
- Los empleados con un salario menor a $30000 son 1 (Kalel) y 11 (Joziah).
- El gerente de Kalel es el empleado con id = 11, quien a煤n trabaja en la compa帽铆a (Joziah).
- El gerente de Joziah es el empleado con id = 6, quien abandon贸 la compan铆a porque no hay una fila con su id
en la tabla Employees
Soluci贸n
import pandas as pd
def find_employees(employees: pd.DataFrame) -> pd.DataFrame:
managers_who_quit = ~employees['manager_id'].isin(employees['employee_id'])
salary_lt_30k = (employees['salary'] < 30000)
managers = employees[salary_lt_30k & managers_who_quit].dropna()
managers.reset_index(drop=True, inplace=True)
managers.sort_values(by='employee_id', inplace=True)
return pd.DataFrame({
'employee_id': managers['employee_id'],
})
def test_find_employees():
data = [
[3, 'Mila', 9, 60301],
[12, 'Antonella', None, 31000],
[13, 'Emery', None, 67084],
[1, 'Kalel', 11, 21241],
[9, 'Mikaela', None, 50937],
[11, 'Joziah', 6, 28485]]
columns = {
'employee_id': 'Int64',
'name': 'object',
'manager_id': 'Int64',
'salary': 'Int64'
}
employees = pd.DataFrame(
data, columns=columns.keys()
).astype(columns)
exp = pd.DataFrame({'employee_id': [11]})
got = find_employees(employees)
pd.testing.assert_frame_equal(got, exp, check_dtype=False)