Pandas Pivot Table Dictionary of Agg function

Estoy tratando de calcular 3 aggregative funciones durante el giro:

  1. Contar
  2. Media
  3. StDev

Este es el código:

n_page = (pd.pivot_table(Main_DF, 
                         values='SPC_RAW_VALUE',  
                         index=['ALIAS', 'SPC_PRODUCT', 'LABLE', 'RAW_PARAMETER_NAME'], 
                         columns=['LOT_VIRTUAL_LINE'],
                         aggfunc={'N': 'count', 'Mean': np.mean, 'Sigma': np.std})
          .reset_index()
         )

El error que obtengo es: KeyError: 'Mean'

¿Cómo puedo calcular esas 3 funciones?

12
Felix 10 dic. 2015 a las 07:46

3 respuestas

La mejor respuesta

El argumento aggfunc de pivot_table toma una función o una lista de funciones pero no dict

aggfunc: function, numpy.mean predeterminado, o lista de funciones Si se pasa la lista de funciones, la tabla dinámica resultante tendrá columnas jerárquicas cuyo nivel superior son los nombres de las funciones (inferidos de los propios objetos de función)

Así que intenta

n_page = (pd.pivot_table(Main_DF, 
                         values='SPC_RAW_VALUE',  
                         index=['ALIAS', 'SPC_PRODUCT', 'LABLE', 'RAW_PARAMETER_NAME'], 
                         columns=['LOT_VIRTUAL_LINE'],
                         aggfunc=[len, np.mean, np.std])
          .reset_index()
         )

Es posible que desee cambiar el nombre de las columnas jerárquicas después.

8
Happy001 10 dic. 2015 a las 05:43

Intenta usar groupby

df = (Main_DF
      .groupby(['ALIAS', 'SPC_PRODUCT', 'LABLE', 'RAW_PARAMETER_NAME'], as_index=False)
      .LOT_VIRTUAL_LINE
      .agg({'N': 'count', 'Mean': np.mean, 'Sigma': np.std})
     )

La configuración as_index=False simplemente los deja como columnas en su marco de datos para que no tenga que restablecer el índice después.

3
Alexander 10 dic. 2015 a las 05:18

Como está escrito en la respuesta aprobada por @ Happy001, aggfunc no puede tomar dict es falso. en realidad podemos pasar el dict a aggfunc.

Una característica realmente útil es la capacidad de pasar un dictionary al aggfunc para que pueda realizar diferentes funciones en cada uno de los valores que seleccione. por ejemplo:

import pandas as pd
import numpy as np

df = pd.read_excel('sales-funnel.xlsx')  #loading xlsx file

table = pd.pivot_table(df, index=['Manager', 'Status'], columns=['Product'], values=['Quantity','Price'],
           aggfunc={'Quantity':len,'Price':[np.sum, np.mean]},fill_value=0)
table

En el código anterior, paso dictionary a aggfunc y realizo len operación en Quantity y mean, sum operaciones en {{ X6}}.

Aquí está la salida adjunta:

enter image description here

El ejemplo está tomado de tabla dinámica explicada.

16
Ganesh_ 11 oct. 2017 a las 07:36
34193862