Soluci贸n
Vista general
Listar los nombres de los animales cuyo peso es estrictamente mayor a 100 kilogramos, ordenados por peso en 贸rden descendente.
Conceptos clave:
Manipulaci贸n del DataFrame con pandas:
- DataFrame: una estructura de datos tabular bidemencional, redimensionable, y heterog茅nea de la librer铆a pandas. Permite varias operaciones como filtrado, ordenamiento, y selecci贸n por columna.
Filtrado de informaci贸n:
- Indices booleanos: Uso de condiciones booleanas para filtrar filas de un DataFrame. En este problema, utilizamos esta t茅cnica para seleccionar los animales que pesan m谩s de 100 kilogramos.
Ordenamiento de los datos:
- El m茅todo
sort_values()
: Un m茅todo de los DataFrame de pandas que se utiliza para ordenar la informaci贸n en base a una o m谩s columnas. En este problema, ordenamos los animales por su peso en 贸rden descendente.
- El m茅todo
Selecci贸n de columnas:
- Selecci贸n de subconjunto: Despu茅s de filtrar y ordenar, seleccionamos un subconjunto de columnas del
DataFrame. En este caso, elegimos s贸lo la columna
name
para producir la lista final de nombres de los animales.
- Selecci贸n de subconjunto: Despu茅s de filtrar y ordenar, seleccionamos un subconjunto de columnas del
DataFrame. En este caso, elegimos s贸lo la columna
Encadenamiento de m茅todos:
- Operaciones de encadenamiento: Realizar multiples operaciones en un DataFrame en una sola l铆nea se logra al conectar los m茅todos mediante puntos. Est谩 es una caracter铆stica poderosa de pandas que puede producir un c贸digo m谩s conciso pero podr铆a ser m谩s complejo de leer para principiantes.
Funciones de Python:
- Definici贸n de funciones: Definimos una funci贸n
findHeavyAnimals
para encapsular nuestra soluci贸n y hacerla reutilizable. Esta funci贸n toma un DataFrame como argumento y retorna otro DataFrame como resultado.
- Definici贸n de funciones: Definimos una funci贸n
Intuici贸n
En la siguiente implementaci贸n comenzamos con el DataFrame original llamado animals
:
name | species | age | weight |
---|---|---|---|
Tatiana | Snake | 98 | 464 |
Khaled | Giraffe | 50 | 41 |
Alex | Leopard | 6 | 328 |
Jonathan | Monkey | 45 | 463 |
Stefan | Bear | 100 | 50 |
Tommy | Panda | 26 | 349 |
Explicaci贸n del encadenamiento de m茅todos:
- Operaci贸n de filtrado: Comenzamos por filtrar los animales cuyo peso es mayor a 100 kilogramos.
filtered_animals = animals[animals['weight'] > 100]
animals['weight'] > 100
: Esta es una operaci贸n booleana de indexado. Por cada fila en el DataFrame, verifica si el valor en la columnaweight
es mayor a 100. Produce una serie de valores booleanos (True
oFalse
)animals[...]
: Al colocar nuestra serie booleana dentro de los corchetes de indexado del DataFrame, filtramos las filas donde la condici贸n esTrue
.- Despu茅s de esta operaci贸n, solo las filas con animales cuyo peso es mayor a 100 kilogramos permanecen en nuestro DataFrame.
name | species | age | weight |
---|---|---|---|
Tatiana | Snake | 98 | 464 |
Alex | Leopard | 6 | 328 |
Jonathan | Monkey | 45 | 463 |
Tommy | Panda | 26 | 349 |
- Operaci贸n de ordenamiento: Enseguida, ordenamos esos animales en base a su peso en 贸rden descendente.
sorted_animals = filtered_animals.sort_values(by='weight', ascending=False)
sort_values()
: Se trata de un m茅todo aplicado a los DataFrames que permite ordenar en funci贸n de los valores de las columnas.by='weight'
: Especificamos que queremos ordenar bas谩ndonos en la columnaweight
.ascending=False
: Al establecer este argumento enFalse
, indicamos que queremos que la ordenaci贸n sea en orden descendente (del m谩s pesado al m谩s ligero).
name | species | age | weight |
---|---|---|---|
Tatiana | Snake | 98 | 464 |
Jonathan | Monkey | 45 | 463 |
Tommy | Panda | 26 | 349 |
Alex | Leopard | 6 | 328 |
- Seleccionar la columna
name
: Finalmente, del DataFrame ordenado, seleccionamos solo los nombres.
names = sorted_animals[['name']]
- Despu茅s de ordenar las filas en funci贸n del peso, s贸lo nos interesa la columna
name
para nuestro resultado final. Utilizando dobles corchetes[['name']]
, seleccionamos s贸lo esta columna. Los corchetes dobles aseguran que el resultado es un DataFrame y no una Serie.
name |
---|
Tatiana |
Jonathan |
Tommy |
Alex |
Visualizaci贸n de pasos 1-3:
El c贸digo de abajo resuelve el problema sin usar encadenamiento de m茅todos.
def findHeavyAnimals(animals: pd.DataFrame) -> pd.DataFrame:
filtered_animals = animals[animals['weight'] > 100]
sorted_animals = filtered_animals.sort_values(
by='weight',
ascending=False
)
names = sorted_animals[['name']]
return names
El encadenamiento de m茅todos es 煤til para crear c贸digo conciso, pero resulta crucial entender cada paso en la cadena para poder detectar errores o modificar el c贸digo si es necesario m谩s facilmente.
Implementaci贸n
import pandas as pd
def findHeavyAnimals(animals: pd.DataFrame) -> pd.DataFrame:
return animals[animals['weight'] > 100].sort_values(by='weight', ascending=False)[['name']]