Ordenación y agregación de datos en Pandas
La ordenación y agregación de datos son operaciones muy comunes e importantes en el análisis de datos, especialmente cuando se analizan grandes conjuntos de datos.
La ordenación nos ayuda a organizar los datos según criterios específicos, mientras que la agregación nos permite resumir los datos y calcular diversas estadísticas.
Pandas ofrece potentes funciones de ordenación y agregación que ayudan a los analistas a procesar datos de manera eficiente.
| Operación | Método | Descripción | Funciones/métodos comunes |
|---|---|---|---|
| Ordenación | sort_values(by, ascending) |
Ordenar según los valores de una columna,ascendingcontrolar el orden ascendente o descendente |
df.sort_values(by='column') |
| Ordenación | sort_index(axis) |
Ordenar según el índice de filas o columnas | df.sort_index(axis=0) |
| Agregación por grupos | groupby(by) |
Después de agrupar por una columna, aplicar funciones de agregación | df.groupby('column') |
| Funciones de agregación | agg() |
Funciones de agregación, comosum()、mean()、count()esperar |
df.groupby('column').agg({'value': 'sum'}) |
| Agregación múltiple | agg([func1, func2]) |
Aplicar múltiples funciones de agregación a la misma columna | df.groupby('column').agg({'value': ['mean', 'sum']}) |
| Ordenación después de agrupar | apply(lambda x: x.sort_values(...)) |
Ordenar después de agrupar | df.groupby('column').apply(lambda x: x.sort_values(...)) |
| Tabla dinámica | pivot_table() |
Crear una tabla dinámica para resumir datos según filas y columnas |
1. Ordenación de datos (Sorting)
La ordenaciónse refiere a organizar los datos en orden ascendente o descendente según los valores de una columna. Pandas proporciona dos métodos principales para ordenar:sort_values()ysort_index()。
Métodos de ordenación
sort_values(): ordenar según los valores de las columnas.sort_index(): ordenar según el índice de filas o columnas.
Ejemplo
| Operación | Método | Descripción | Ejemplo |
|---|---|---|---|
| Ordenar por valor | df.sort_values(by, ascending) |
Según la columna especificada (by) ordenar,ascendingcontrolar el orden ascendente o descendente, siendo ascendente por defecto |
df.sort_values(by='Age', ascending=False) |
| Ordenar por índice | df.sort_index(axis) |
Ordenar según el índice de filas o columnas,axiscontrolar si se ordena por filas o columnas |
df.sort_index(axis=0) |
sort_values()Ejemplo:
Ejemplo
# Datos de ejemplo
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Age': [25, 30, 35, 40],
'Salary': [50000, 60000, 70000, 80000]}
df = pd.DataFrame(data)
# Ordenar en orden descendente según los valores de la columna "Age"
df_sorted = df.sort_values(by='Age', ascending=False)
print(df_sorted)
Salida:
Name Age Salary 3 David 40 80000 2 Charlie 35 70000 1 Bob 30 60000 0 Alice 25 50000
sort_index()Ejemplo:
Ejemplo
df_sorted_by_index = df.sort_index(axis=0)
print(df_sorted_by_index)
Salida:
Name Age Salary
0 Alice 25 50000
1 Bob 30 60000
2 Charlie 35 70000
3 David 40 80000
2. Agregación de datos (Aggregation)
La agregaciónconsiste en resumir los datos según ciertas reglas, generalmente realizando operaciones como suma, promedio, máximo, mínimo, etc. sobre los datos de ciertas columnas. Pandas proporcionagroupby()el método para agrupar los datos y luego aplicar diferentes funciones de agregación.
Métodos de agregación
groupby(): agrupar por ciertas columnas.- Funciones de agregación: como
sum(),mean(),count(),min(),max(),std()etc.
Ejemplo
| Operación | Método | Descripción | Ejemplo |
|---|---|---|---|
| Agrupar por columna y agregar | df.groupby(by).agg() |
Según la columna especificada (by) agrupar,agg()se pueden pasar diferentes funciones de agregación para realizar diversas operaciones |
df.groupby('Department').agg({'Salary': 'mean'}) |
| Aplicación de múltiples funciones de agregación | df.groupby(by).agg([func1, func2]) |
Se pueden aplicar múltiples funciones de agregación a la misma columna, devolviendo varios resultados de agregación | df.groupby('Department').agg({'Salary': ['mean', 'sum']}) |
groupby()Ejemplo:
Ejemplo
# Datos de ejemplo
data = {'Department': ['HR', 'Finance', 'HR', 'IT', 'IT'],
'Employee': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
'Salary': [50000, 60000, 55000, 70000, 75000]}
df = pd.DataFrame(data)
# Agrupar por departamento y calcular el salario promedio de cada departamento
grouped = df.groupby('Department')['Salary'].mean()
print(grouped)
Salida:
Department Finance 60000.0 HR 52500.0 IT 72500.0 Name: Salary, dtype: float64
Aplicación de múltiples funciones de agregación:
Ejemplo
grouped_multiple = df.groupby('Department').agg({'Salary': ['mean', 'sum']})
print(grouped_multiple)
Salida:
Salary
mean sum
Department
Finance 60000.0 60000
HR 52500.0 105000
IT 72500.0 145000
3. Ordenación después de agrupar
Los datos agregados se pueden ordenar aún más según los valores de una columna, lo que permite encontrar los valores más importantes en un grupo específico.
Ordenación después de agrupar
| Operación | Método | Descripción | Ejemplo |
|---|---|---|---|
| Ordenación después de agrupar | df.groupby(by).apply(lambda x: x.sort_values(by='col')) |
Ordenar dentro de cada grupo según los valores de una columna. | df.groupby('Department').apply(lambda x: x.sort_values(by='Salary', ascending=False)) |
Ejemplo de ordenación después de agrupar:
Ejemplo
grouped_sorted = df.groupby('Department').apply(lambda x: x.sort_values(by='Salary', ascending=False))
print(grouped_sorted)
Salida:
Department Employee Salary Department Finance Bob 60000 HR Charlie 55000 HR Alice 50000 IT Eve 75000 IT David 70000
4. Tabla dinámica
La tabla dinámica (Pivot Table) es una forma especial de agregación que nos permite resumir rápidamente los datos mediante filas, columnas y funciones de agregación, similar a las tablas dinámicas de Excel.
Ejemplo
| Operación | Método | Descripción | Ejemplo |
|---|---|---|---|
| Crear tabla dinámica | df.pivot_table(values, index, columns, aggfunc) |
Utilizar columnas especificadas para resumir por filas y columnas,valueses el valor que se va a agregar,aggfunces la función de agregación |
df.pivot_table(values='Salary', index='Department', aggfunc='mean') |
Ejemplo de tabla dinámica:
Ejemplo
pivot_table = df.pivot_table(values='Salary', index='Department', aggfunc='mean')
print(pivot_table)
Salida:
Department Finance 60000.0 HR 52500.0 IT 72500.0 Name: Salary, dtype: float64Otras extensiones