Recuento de categorÃas salariales
Escribe una solución para calcular el número de cuentas bancarias para cada categorÃa salarial. Las categorÃas salariales son: - 'Low Salary': Todos los salarios estrictamente menores a $20000. - 'Average Salary': Todos los salarios en el rango inclusivo [$20000, $50000]. - 'High Salary': Todos los salarios estrictamente mayores a $50000. La tabla de resultados debe contener las tres categorÃas. Si no hay cuentas en una categorÃa, regrese 0. Regrese el resultado en cualquier orden.
Tabla: Accounts
+-------------+------+
| Column Name | Type |
+-------------+------+
| account_id | int |
| income | int |
+-------------+------+
- account_id es la llave primaria (columna con valores únicos).
- Cada fila contiene información acerca del ingreso mensual de cada cuenta bancaria.
El formato del resultado se muestra en el siguiente ejemplo.
Ejemplo 1:
Entrada:
Tabla Accounts:
+------------+--------+
| account_id | income |
+------------+--------+
| 3 | 108939 |
| 2 | 12747 |
| 8 | 87709 |
| 6 | 91796 |
+------------+--------+
Salida:
+----------------+----------------+
| category | accounts_count |
+----------------+----------------+
| Low Salary | 1 |
| Average Salary | 0 |
| High Salary | 3 |
+----------------+----------------+
Explicación:
- Low Salary: Cuenta 2.
- Average Salary: Ninguna cuenta.
- High Salary: Cuentas 3, 6, y 8.
Solución
import pandas as pd
def count_salary_categories(accounts: pd.DataFrame) -> pd.DataFrame:
lower, upper = 20000, 50000
low = accounts[
accounts.income < lower]['account_id']
avg = accounts[
accounts.income.between(lower, upper)]['account_id']
high = accounts[
accounts.income > upper]['account_id']
answer = {
'Low Salary': low.size,
'Average Salary': avg.size,
'High Salary': high.size
}
return pd.DataFrame({
'category': answer.keys(),
'accounts_count': answer.values(),
})
def test_count_salary_categories():
data = [[3, 108939], [2, 12747], [8, 87709], [6, 91796]]
accounts = pd.DataFrame(
data, columns=['account_id', 'income']
).astype({'account_id': 'Int64', 'income': 'Int64'})
got = count_salary_categories(accounts)
expected = pd.DataFrame({
'category': ['Low Salary', 'Average Salary', 'High Salary'],
'accounts_count': [1, 0, 3],
})
pd.testing.assert_frame_equal(got, expected)