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:

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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.

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:
  1. 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 columna weight es mayor a 100. Produce una serie de valores booleanos (True o False)
  • animals[...]: Al colocar nuestra serie booleana dentro de los corchetes de indexado del DataFrame, filtramos las filas donde la condici贸n es True.
  • 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
  1. 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 columna weight.
  • ascending=False: Al establecer este argumento en False, 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
  1. 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:

method chaining fig1

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']]

slackmart blog 漏 2024