Función df.pivot() de Pandas

Pandas 常用函数Funciones comunes 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 utilizarpivot_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

import pandas as pd

# 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:

  1. Los datos originales están en formato largo; cada fila registra las ventas de un producto en una región determinada.
  2. pivot()Se utiliza la columna product como índice de filas, la columna region como índice de columnas y sales como valores.
  3. 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

import pandas as pd

# 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ámetrovalues, 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

import pandas as pd

# 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 deindex=['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.
  • Usandoreset_index()se puede convertir el índice jerárquico nuevamente en columnas normales.

Nota: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.

Pandas 常用函数Funciones comunes de Pandas

Otras extensiones