Función df.pivot() de Pandas
df.pivot()Es un método miembro de DataFrame, utilizado paracrear tablas dinámicas. Puede remodelar los datos en una nueva disposición según el índice de filas, el índice de columnas y las columnas de valores especificados.
ypivot_table()A diferencia de,pivot()no admite operaciones de agregación y requiere que la combinación del índice de filas y del índice de columnas sea única; de lo contrario, se lanzará un error.
Definición de la palabra: pivotSignifica "rotación, pivote"; aquí se refiere a la "rotación" o remodelación de los datos, que permite cambiar dinámicamente las dimensiones de filas y columnas, como una tabla dinámica.
Sintaxis básica y parámetros
df.pivot()Es un método de instancia de DataFrame, que se invoca mediante el operador de punto.
Formato de sintaxis
DataFrame.pivot(index=None, columns, values=None)
Descripción de parámetros
- Parámetro:
index- Tipo: Nombre de columna, etiqueta, lista de etiquetas o None.
- Descripción: La columna utilizada como índice de filas del nuevo DataFrame. Si es None, se utiliza el índice de filas existente.
- Parámetro:
columns- Tipo: Nombre de columna o etiqueta.
- Descripción:Parámetro obligatorio. La columna utilizada como índice de columnas del nuevo DataFrame, que expande los valores únicos en nombres de columnas.
- Parámetro:
values- Tipo: Nombre de columna, etiqueta, lista de etiquetas o None.
- Descripción: Las columnas de datos utilizadas para completar el DataFrame. Si no se especifica, se utilizan todas las columnas excepto index y columns.
Descripción de la función
- Valor de retorno: Devuelve un nuevo DataFrame, es decir, la tabla dinámica.
- Limitaciones: Si la combinación de index y columns contiene valores duplicados, se lanzará un ValueError. En este caso, se debe utilizar
pivot_table(), que realizará la agregación automáticamente.
Ejemplos
A través de una serie de ejemplos de simples a complejos, dominaremos por completodf.pivot()el uso de.
Ejemplo 1: Uso básico - Crear una tabla dinámica simple
Ejemplo
# 1. Crear datos de ventas (una combinación de producto-región-monto de ventas por línea)
sales = pd.DataFrame({
'product': ['A', 'A', 'B', 'B', 'C', 'C'],
'region': ['North', 'South', 'North', 'South', 'North', 'South'],
'sales': [100, 150, 200, 180, 220, 250]
})
print("=== Datos brutos de ventas ===")
print(sales)
# 2. Usar df.pivot() para crear una tabla dinámica
# Índice de filas: product, índice de columnas: region, valor: sales
pivot_result = sales.pivot(index='product', columns='region', values='sales')
print(n=== df.pivot() tabla dinámica ===)
print(pivot_result)
Resultado esperado:
=== 原始销售数据 === product region sales 0 A North 100 1 A South 150 2 B North 200 3 B South 180 4 C North 220 5 C South 250 === df.pivot() 透视表 === region North South product A 100 150 B 200 180 C 220 250
Análisis del código:
- Los datos originales están en formato largo; cada fila registra las ventas de un producto en una región determinada.
pivot()Se utiliza la columna product como índice de filas, la columna region como índice de columnas y sales como valores.- El resultado es una tabla bidimensional clara que permite comparar de forma intuitiva las ventas de diferentes productos en diferentes regiones.
Ejemplo 2: Múltiples columnas de valores - Pivotar múltiples métricas a la vez
Se pueden pivotar varias columnas numéricas al mismo tiempo para obtener una vista de datos más enriquecida.
Ejemplo
# 1. Crear datos que contengan el monto de ventas y la cantidad
sales = pd.DataFrame({
'product': ['A', 'A', 'B', 'B', 'A', 'A', 'B', 'B'],
'region': ['North', 'South', 'North', 'South', 'East', 'West', 'East', 'West'],
'sales': [100, 150, 200, 180, 120, 130, 190, 210],
'quantity': [10, 15, 20, 18, 12, 13, 19, 21]
})
print("=== Datos originales ===")
print(sales)
# 2. Solo pivotar las ventas
print("n=== Tabla dinámica de ventas ===")
sales_pivot = sales.pivot(index='product', columns='region', values='sales')
print(sales_pivot)
# 3. Pivotar ventas y cantidades (sin especificar values, usando todas las columnas numéricas)
print("n=== Pivote de múltiples indicadores ===")
multi_pivot = sales.pivot(index='product', columns='region')
print(multi_pivot)
Resultado esperado:
=== 原始数据 ===
product region sales quantity
0 A North 100 10
1 A South 150 15
2 B North 200 20
3 B South 180 18
4 A East 120 12
5 A West 130 13
6 B East 190 19
7 B West 210 21
=== 销售额透视表 ===
region East North South West
product
A 120 100 150 130
B 190 200 180 210
=== 多指标透视 ===
sales quantity
region East North South West East North South West
product
A 120 100 150 130 12 10 15 13
B 190 200 180 210 19 20 18 21
Análisis del código:
- Si no se especifica el parámetro
values, se utilizan todas las columnas excepto index y columns. - La pivoteación de múltiples columnas produce un índice de columnas multinivel; el primer nivel son los nombres de columna originales y el segundo nivel son los valores del parámetro columns.
- Este método facilita comparar simultáneamente el rendimiento de múltiples métricas en diferentes dimensiones.
Ejemplo 3: Índice multinivel - Usar múltiples columnas como índice de filas
Se pueden utilizar múltiples columnas para crear tablas dinámicas con índice jerárquico.
Ejemplo
# 1. Crear datos que contengan año, trimestre e información del producto
data = pd.DataFrame({
'year': [2023, 2023, 2023, 2023, 2024, 2024, 2024, 2024],
'quarter': ['Q1', 'Q1', 'Q2', 'Q2', 'Q1', 'Q1', 'Q2', 'Q2'],
'product': ['A', 'B', 'A', 'B', 'A', 'B', 'A', 'B'],
'sales': [100, 150, 200, 180, 220, 250, 230, 270]
})
print("=== Datos originales ===")
print(data)
# 2. Usar múltiples columnas como índice de filas (forma de lista)
print(n=== Tabla dinámica de índice de filas multinivel ===)
pivot_multi = data.pivot(index=['year', 'quarter'], columns='product', values='sales')
print(pivot_multi)
# 3. Restablecer el índice y convertir a un DataFrame normal
print("n=== Después de restablecer el índice ===")
pivot_reset = pivot_multi.reset_index()
print(pivot_reset)
Resultado esperado:
=== 原始数据 === year quarter product sales 0 2023 Q1 A 100 1 2023 Q1 B 150 值会抛出错误 - 这是 pivot() 和 pivot_table() 的关键区别:pivot() 要求数据唯一性,pivot_table() 会自动聚合重复值
Análisis del código:
- A través de
index=['year', 'quarter']se puede crear una tabla dinámica con índice de filas multinivel. - Este formato facilita analizar el rendimiento de diferentes productos por dimensión temporal.
- Usando
reset_index()se puede convertir el índice jerárquico nuevamente en columnas normales.
Otras extensionesNota:Si en los datos originales existe la misma combinación de index + columns,
pivot()se lanzaráValueError: Index contains duplicate entries. En este caso, se debe utilizarpivot_table(), que agregará automáticamente los valores duplicados.
Funciones comunes de Pandas