Pandas Sorting Data

PandasBeginner
Practicar Ahora

Introducción

¡Bienvenido al laboratorio de ordenamiento de datos con Pandas! El ordenamiento es una operación fundamental en el análisis de datos. Te ayuda a organizar tus datos, facilitando su lectura, comprensión y análisis. Ya sea que necesites encontrar los valores más altos o más bajos, o simplemente organizar los datos en un orden lógico, Pandas proporciona herramientas potentes y flexibles para realizar esta tarea.

En este laboratorio, aprenderás a utilizar los métodos de ordenamiento principales en Pandas:

  • sort_values(): Para ordenar un DataFrame por los valores de una o más columnas.
  • sort_index(): Para ordenar un DataFrame por su índice.
  • reset_index(): Para restablecer el índice después de una operación de ordenamiento.

Al finalizar este laboratorio, serás competente en la organización de tus datos para satisfacer tus necesidades analíticas. ¡Empecemos!

Este es un Guided Lab, que proporciona instrucciones paso a paso para ayudarte a aprender y practicar. Sigue las instrucciones cuidadosamente para completar cada paso y obtener experiencia práctica. Los datos históricos muestran que este es un laboratorio de nivel principiante con una tasa de finalización del 95%. Ha recibido una tasa de reseñas positivas del 100% por parte de los estudiantes.

Ordenar DataFrame por una sola columna usando sort_values

En este paso, aprenderás la operación de ordenamiento más común: ordenar un DataFrame por los valores de una sola columna. Para ello, utilizaremos el método sort_values(). El parámetro by se utiliza para especificar la columna por la que deseas ordenar.

Primero, abre el archivo main.py ubicado en el directorio ~/project utilizando el explorador de archivos de la izquierda. Este archivo ha sido pre-poblado con un DataFrame de ejemplo.

Ahora, agrega el siguiente código al final de main.py para ordenar el DataFrame por la columna Age.

## --- Paso 1: Ordenar por una sola columna ---
df_sorted_by_age = df.sort_values(by='Age')
print("\nDataFrame ordenado por Edad:")
print(df_sorted_by_age)

Tu archivo main.py completo debería verse ahora así:

import pandas as pd

## Crear un DataFrame de ejemplo para nuestros ejercicios
data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'Age': [25, 22, 25, 28, 22],
    'Score': [85, 91, 88, 79, 91]
}
df = pd.DataFrame(data)

print("DataFrame Original:")
print(df)

## --- Paso 1: Ordenar por una sola columna ---
df_sorted_by_age = df.sort_values(by='Age')
print("\nDataFrame ordenado por Edad:")
print(df_sorted_by_age)

Para ver el resultado, ejecuta el script desde la terminal.

python3 main.py

Verás el DataFrame original seguido del nuevo DataFrame ordenado por edad en orden ascendente.

Salida esperada:

DataFrame Original:
      Name  Age  Score
0    Alice   25     85
1      Bob   22     91
2  Charlie   25     88
3    David   28     79
4      Eve   22     91

DataFrame ordenado por Edad:
      Name  Age  Score
1      Bob   22     91
4      Eve   22     91
0    Alice   25     85
2  Charlie   25     88
3    David   28     79

Ordenar por múltiples columnas en orden ascendente

En este paso, aprenderás cómo ordenar un DataFrame basándote en múltiples columnas. Esto es útil cuando tienes empates en la primera columna de ordenamiento y deseas aplicar un criterio de ordenamiento secundario.

Para ordenar por múltiples columnas, pasas una lista de nombres de columnas al parámetro by del método sort_values(). Pandas ordenará por la primera columna de la lista, y luego usará la segunda columna para desempatar, y así sucesivamente.

Vamos a ordenar nuestro DataFrame primero por Age y luego por Score. Agrega el siguiente código al final de tu archivo main.py.

## --- Paso 2: Ordenar por múltiples columnas ---
df_sorted_multiple = df.sort_values(by=['Age', 'Score'])
print("\nDataFrame ordenado por Edad y luego por Puntuación:")
print(df_sorted_multiple)

Ahora, ejecuta el script nuevamente para ver los cambios.

python3 main.py

Verás una nueva sección en la salida. Observa cómo las dos filas con Age 22 ahora están ordenadas por Score (Bob con 91 aparece después de Eve con 91, ya que su orden es estable). Lo mismo ocurre con las filas con Age 25.

Salida esperada (mostrando solo la parte nueva):

...

DataFrame ordenado por Edad y luego por Puntuación:
      Name  Age  Score
1      Bob   22     91
4      Eve   22     91
0    Alice   25     85
2  Charlie   25     88
3    David   28     79

Ordenar en orden descendente con ascending=False

En este paso, aprenderás cómo controlar la dirección del ordenamiento. Por defecto, sort_values() ordena en orden ascendente. Puedes cambiar esto utilizando el parámetro ascending.

  • Para ordenar en orden descendente, establece ascending=False.
  • Al ordenar por múltiples columnas, puedes especificar un orden diferente para cada columna pasando una lista de booleanos, por ejemplo, ascending=[True, False].

Vamos a ordenar el DataFrame por Age en orden ascendente y Score en orden descendente. Esto nos ayudará a encontrar la puntuación más alta dentro de cada grupo de edad. Agrega el siguiente código al final de main.py.

## --- Paso 3: Ordenar en orden descendente y mixto ---
df_sorted_mixed = df.sort_values(by=['Age', 'Score'], ascending=[True, False])
print("\nDataFrame ordenado por Edad (asc) y Puntuación (desc):")
print(df_sorted_mixed)

Ejecuta el script para observar el resultado.

python3 main.py

En la salida, mira las filas para la edad 22. Eve y Bob tienen una puntuación de 91, por lo que su orden podría no cambiar. Para la edad 25, Charlie (Puntuación 88) ahora aparece antes que Alice (Puntuación 85) porque ordenamos las puntuaciones en orden descendente.

Salida esperada (mostrando solo la parte nueva):

...

DataFrame ordenado por Edad (asc) y Puntuación (desc):
      Name  Age  Score
1      Bob   22     91
4      Eve   22     91
2  Charlie   25     88
0    Alice   25     85
3    David   28     79

Ordenar el índice usando sort_index

En este paso, aprenderás cómo ordenar un DataFrame por su índice. Después de realizar una operación sort_values(), el índice del DataFrame se desordena. Puedes ver esto en las salidas anteriores (por ejemplo, el índice es 1, 4, 2, 0, 3).

El método sort_index() te permite ordenar el DataFrame basándote en las etiquetas de su índice, restaurando el orden original si el índice era un rango simple.

Tomemos el resultado del paso anterior (df_sorted_mixed) y ordenémoslo por su índice. Agrega el siguiente código al final de main.py.

## --- Paso 4: Ordenar por índice ---
## El resultado anterior (df_sorted_mixed) tiene un índice desordenado. Vamos a ordenarlo por índice.
df_reordered_by_index = df_sorted_mixed.sort_index()
print("\nDataFrame reordenado por índice:")
print(df_reordered_by_index)

Ejecuta el script.

python3 main.py

Verás que el DataFrame ahora está ordenado por su índice (0, 1, 2, 3, 4), lo que efectivamente lo restaura a su orden de fila original.

Salida esperada (mostrando solo la parte nueva):

...

DataFrame reordenado por índice:
      Name  Age  Score
0    Alice   25     85
1      Bob   22     91
2  Charlie   25     88
3    David   28     79
4      Eve   22     91

Restablecer el índice después de ordenar con reset_index

En este paso final, aprenderás cómo restablecer el índice de un DataFrame. Después de ordenar, el índice ya no es un rango limpio y secuencial a partir de 0. Si bien sort_index() puede restaurar el orden original, a veces quieres mantener el nuevo orden ordenado pero tener un índice nuevo y secuencial.

El método reset_index() es perfecto para esto. Reemplaza el índice actual con un índice entero por defecto (0, 1, 2, ...). Es común usar el parámetro drop=True para descartar el índice antiguo por completo. Si no usas drop=True, el índice antiguo se agregará como una nueva columna llamada index.

Tomemos uno de nuestros DataFrames ordenados (df_sorted_mixed) y restablezcamos su índice. Agrega la última parte del código a main.py.

## --- Paso 5: Restablecer el índice después de ordenar ---
## Tomemos un DataFrame ordenado y démosle un índice nuevo y limpio
df_with_reset_index = df_sorted_mixed.reset_index(drop=True)
print("\nDataFrame ordenado con índice restablecido:")
print(df_with_reset_index)

Ejecuta el script por última vez.

python3 main.py

Observa la salida final. El DataFrame todavía está ordenado por Edad (asc) y Puntuación (desc), pero el índice es ahora una secuencia limpia de 0 a 4.

Salida esperada (mostrando solo la parte nueva):

...

DataFrame ordenado con índice restablecido:
      Name  Age  Score
0      Bob   22     91
1      Eve   22     91
2  Charlie   25     88
3    Alice   25     85
4    David   28     79

Resumen

¡Felicitaciones por completar el laboratorio de Pandas Sorting Data! Has aprendido las habilidades esenciales para organizar y ordenar tus datos dentro de un DataFrame de Pandas.

En este laboratorio, practicaste:

  • Ordenar por una sola columna usando sort_values(by='nombre_columna').
  • Ordenar por múltiples columnas pasando una lista al parámetro by.
  • Controlar la dirección de ordenación con el parámetro ascending.
  • Restaurar el orden original ordenando el índice con sort_index().
  • Crear un índice nuevo y limpio en un DataFrame ordenado usando reset_index(drop=True).

Estas técnicas de ordenación son fundamentales para la limpieza, exploración y preparación de datos para análisis y visualización más avanzados. Sigue practicando estas habilidades para ser más eficiente en tu viaje de ciencia de datos.