Curso
Eliminar duplicados es una habilidad clave para obtener recuentos precisos, porque a menudo no quieres contar lo mismo varias veces. En Python, puedes hacerlo con el módulo pandas, que incluye el método drop_duplicates.
Veamos cómo usarlo con algunos ejemplos.
Eliminar nombres duplicados
Imagina que tienes un dataframe con visitas al veterinario y la clínica quiere saber cuántos perros de cada raza han pasado por allí. Sin embargo, en tu conjunto de datos hay perros como Max y Stella que han ido al veterinario más de una vez. Por tanto, no puedes limitarte a contar las razas en la columna de raza.
print(vet_visits)
date name breed weight_kg
0 2018-09-02 Bella Labrador 24.87
1 2019-06-07 Max Labrador 28.35
2 2018-01-17 Stella Chihuahua 1.51
3 2019-10-19 Lucy Chow Chow 24.07
.. ... ... ... ...
71 2018-01-20 Stella Chihuahua 2.83
72 2019-06-07 Max Chow Chow 24.01
73 2018-08-20 Lucy Chow Chow 24.40
74 2019-04-22 Max Labrador 28.54
Para resolverlo, eliminarías las filas que contienen un nombre de perro ya listado antes; es decir, extraerías una única fila por cada nombre.
Para ello, usarías el método drop_duplicates. Acepta el argumento subset, que indica la columna sobre la que queremos detectar duplicados; en este caso, queremos quedarnos con los nombres únicos.
vet_visits.drop_duplicates(subset="name")
date name breed weight_kg
0 2018-09-02 Bella Labrador 24.87
1 2019-06-07 Max Chow Chow 24.01
2 2019-03-19 Charlie Poodle 24.95
3 2018-01-17 Stella Chihuahua 1.51
4 2019-10-19 Lucy Chow Chow 24.07
7 2019-03-30 Cooper Schnauzer 16.91
10 2019-01-04 Bernie St. Bernard 74.98
(6 2019-06-07 Max Labrador 28.35)
Pero ¿y si hay perros con el mismo nombre?
Eliminar pares duplicados
En ese caso, debemos tener en cuenta algo más que name al eliminar duplicados. Como Max y Max son de razas distintas, podemos eliminar las filas que repitan pares de nombre y raza ya vistos antes en el dataset.
unique_dogs = vet_visits.drop_duplicates(subset=["name", "breed"])
print(unique_dogs)
date name breed weight_kg
0 2018-09-02 Bella Labrador 24.87
1 2019-03-13 Max Chow Chow 24.13
2 2019-03-19 Charlie Poodle 24.95
3 2018-01-17 Stella Chihuahua 1.51
4 2019-10-19 Lucy Chow Chow 24.07
6 2019-06-07 Max Labrador 28.35
7 2019-03-30 Cooper Schnauzer 16.91
10 2019-01-04 Bernie St. Bernard 74.98
Para basar la eliminación de duplicados en varias columnas, podemos pasar una lista de nombres de columna al argumento subset; en este caso, name y breed.
Ahora se han incluido ambos Max.
Ejemplo interactivo
En este ejercicio, crearás nuevos DataFrames con valores únicos de sales. sales está disponible y pandas está importado como pd.
Realizarás estos pasos:
- Primero, eliminarás de
saleslas filas con pares duplicados destoreytype, guardarás el resultado comostore_typesy mostrarás el head. - Después, eliminarás de
saleslas filas con pares duplicados destoreydepartment, guardarás el resultado comostore_deptsy mostrarás el head. - Filtra las filas que correspondan a semanas festivas y elimina las
dateduplicadas, guardándolo comoholiday_dates. - Por último, selecciona la columna
datedeholiday_datesy muestra el dataframeholiday_dates.
# Drop duplicate store/type combinations
store_types = sales.drop_duplicates(subset=["store", "type"])
print(store_types.head())
# Drop duplicate store/department combinations
store_depts = sales.drop_duplicates(subset=["store", "department"])
print(store_depts.head())
# Subset the rows that are holiday weeks and drop duplicate dates
holiday_dates = sales[sales["is_holiday"]].drop_duplicates(subset="date")
# Print date col of holiday_dates
print(holiday_dates["date"])
Al ejecutar el código anterior, se obtiene el siguiente resultado:
store type department date weekly_sales is_holiday temperature_c fuel_price_usd_per_l unemployment
0 1 A 1 2010-02-05 24924.50 False 5.728 0.679 8.106
901 2 A 1 2010-02-05 35034.06 False 4.550 0.679 8.324
1798 4 A 1 2010-02-05 38724.42 False 6.533 0.686 8.623
2699 6 A 1 2010-02-05 25619.00 False 4.683 0.679 7.259
3593 10 B 1 2010-02-05 40212.84 False 12.411 0.782 9.765
store type department date weekly_sales is_holiday temperature_c fuel_price_usd_per_l unemployment
0 1 A 1 2010-02-05 24924.50 False 5.728 0.679 8.106
12 1 A 2 2010-02-05 50605.27 False 5.728 0.679 8.106
24 1 A 3 2010-02-05 13740.12 False 5.728 0.679 8.106
36 1 A 4 2010-02-05 39954.04 False 5.728 0.679 8.106
48 1 A 5 2010-02-05 32229.38 False 5.728 0.679 8.106
498 2010-09-10
691 2011-11-25
2315 2010-02-12
6735 2012-09-07
6810 2010-12-31
6815 2012-02-10
6820 2011-09-09
Name: date, dtype: datetime64[ns]
Si quieres aprender más sobre recuentos y agregaciones de datos, echa un vistazo a este vídeo de nuestro curso Data Manipulation with pandas.
Este contenido forma parte del curso Data Manipulation with pandas de DataCamp, creado por Maggie Matsui y Richie Cotton.
