Ejercicio 4

El fichero [horas-trabajo.csv] contiene el número de horas mensuales trabajadas por los empleados de una empresa durante el primer cuatrimestre. Crear un programa que realice las siguientes operaciones utilizando la librería Pandas:

  1. Crear un DataFrame leyendo el fichero desde internet con la url http://aprendeconalf.es/python/examenes/soluciones/examen-2020-05-27/horas-trabajo.csv. Obsérvese que el separador de campos es el punto y coma.
  2. Mostrar por pantalla una serie con el número total de horas trabajadas para cada mes.
  3. Mostrar por pantalla una serie con el número de operarios de cada departamento.
  4. Mostrar por pantalla el número de empleados que han trabajado todos los meses, es decir, que tienen un número de horas todos los meses del cuatrimestre.
  5. Convertir el DataFrame a formato largo, de manera que todas las horas aparezcan en la misma columna.
  6. Mostrar por pantalla una serie con el número medio de horas trabajadas en cada departamento.
  7. Mostrar por pantalla una serie con el total de horas trabajadas de cada operario.
  8. Mostrar por pantalla una serie con los salarios de todos los operarios ordenados de mayor a menor.

Solución 1


In [1]:
import pandas as pd 

# Apartado 1
# Crear un DataFrame leyendo el fichero desde internet.
operarios = pd.read_csv('http://aprendeconalf.es/python/examenes/soluciones/examen-2020-05-27/horas-trabajo.csv', sep = ';')
operarios


Out[1]:
Id Departamento Enero Febrero Marzo Abril
0 OP1 Proveedores 180 160.0 140.0 180.0
1 OP2 Ventas 120 140.0 NaN 100.0
2 OP3 Ventas 80 90.0 80.0 80.0
3 OP5 IT 180 170.0 180.0 180.0
4 OP6 Marketing 100 NaN 100.0 NaN
5 OP7 Ventas 160 160.0 160.0 160.0
6 OP8 Proveedores 100 80.0 110.0 80.0
7 OP9 IT 80 80.0 80.0 80.0
8 OP10 Ventas 180 160.0 180.0 180.0

In [2]:
# Apartado 2
# Mostrar por pantalla una serie con el número total de horas trabajadas para cada mes.
print('Número de horas trabajadas por meses')
print(operarios[['Enero', 'Febrero', 'Marzo']].sum())


Número de horas trabajadas por meses
Enero      1180.0
Febrero    1040.0
Marzo      1030.0
dtype: float64

In [8]:
# Apartado 3
# Mostrar por pantalla una serie con el número de operarios de cada departamento.
print('Número de operarios por departamentos')
print(operarios.Departamento.value_counts())


Número de operarios por departamentos
Ventas         4
IT             2
Proveedores    2
Marketing      1
Name: Departamento, dtype: int64

In [4]:
# Apartado 4
# Mostrar por pantalla el número de empleados que han trabajado todos los meses, es decir, que tienen un número de horas todos los meses del cuatrimestre.
print('Número operarios que han trabajado todos los meses: ', operarios.dropna().shape[0])


Número operarios que han trabajado todos los meses:  7

In [6]:
# Apartado 5
# Convertir el DataFrame a formato largo, de manera que todas las horas aparezcan en la misma columna.
operarios_largo = operarios.melt(id_vars=['Id', 'Departamento'], var_name='Mes', value_name='Horas')
print("DataFrame en formato largo")
operarios_largo


DataFrame en formato largo
Out[6]:
Id Departamento Mes Horas
0 OP1 Proveedores Enero 180.0
1 OP2 Ventas Enero 120.0
2 OP3 Ventas Enero 80.0
3 OP5 IT Enero 180.0
4 OP6 Marketing Enero 100.0
5 OP7 Ventas Enero 160.0
6 OP8 Proveedores Enero 100.0
7 OP9 IT Enero 80.0
8 OP10 Ventas Enero 180.0
9 OP1 Proveedores Febrero 160.0
10 OP2 Ventas Febrero 140.0
11 OP3 Ventas Febrero 90.0
12 OP5 IT Febrero 170.0
13 OP6 Marketing Febrero NaN
14 OP7 Ventas Febrero 160.0
15 OP8 Proveedores Febrero 80.0
16 OP9 IT Febrero 80.0
17 OP10 Ventas Febrero 160.0
18 OP1 Proveedores Marzo 140.0
19 OP2 Ventas Marzo NaN
20 OP3 Ventas Marzo 80.0
21 OP5 IT Marzo 180.0
22 OP6 Marketing Marzo 100.0
23 OP7 Ventas Marzo 160.0
24 OP8 Proveedores Marzo 110.0
25 OP9 IT Marzo 80.0
26 OP10 Ventas Marzo 180.0
27 OP1 Proveedores Abril 180.0
28 OP2 Ventas Abril 100.0
29 OP3 Ventas Abril 80.0
30 OP5 IT Abril 180.0
31 OP6 Marketing Abril NaN
32 OP7 Ventas Abril 160.0
33 OP8 Proveedores Abril 80.0
34 OP9 IT Abril 80.0
35 OP10 Ventas Abril 180.0

In [9]:
# Apartado 6
# Mostrar por pantalla una serie con el número medio de horas trabajadas en cada departamento.
print("Media de horas mensuales trabajadas por departamentos")
print(operarios_largo.groupby('Departamento').Horas.mean())


Media de horas mensuales trabajadas por departamentos
Departamento
IT             128.750000
Marketing      100.000000
Proveedores    128.750000
Ventas         135.333333
Name: Horas, dtype: float64

In [10]:
# Apartado 7
# Mostrar por pantalla una serie con el total de horas trabajadas de cada operario.
print("Total de horas trabajadas de cada operario")
print(operarios_largo.groupby('Id').Horas.sum())


Total de horas trabajadas de cada operario
Id
OP1     660.0
OP10    700.0
OP2     360.0
OP3     330.0
OP5     710.0
OP6     200.0
OP7     640.0
OP8     370.0
OP9     320.0
Name: Horas, dtype: float64

In [11]:
# Apartado 8
# Mostrar por pantalla una serie con los salarios de todos los operarios ordenados de mayor a menor.
print("Salarios de los operarios")
print((operarios_largo.groupby('Id').Horas.sum()*10).sort_values(ascending = False))


Salarios de los operarios
Id
OP5     7100.0
OP10    7000.0
OP1     6600.0
OP7     6400.0
OP8     3700.0
OP2     3600.0
OP3     3300.0
OP9     3200.0
OP6     2000.0
Name: Horas, dtype: float64

In [ ]: