web-dev-qa-db-fra.com

Pandas Liste des tableaux croisés dynamiques d'Aggfunc

Pandas Pivot Table Dictionary of Agg function

J'essaie de calculer 3 aggregative fonctions pendant le pivotement:

  1. Compter
  2. Signifier
  3. StDev

Voici le code:

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()
         )

L'erreur que j'obtiens est: KeyError: 'Mean'

Comment puis-je calculer ces 3 fonctions?

10
Felix

L'argument aggfunc de pivot_table prend une fonction ou une liste de fonctions mais pas dict

aggfunc: fonction, numpy.mean par défaut ou liste de fonctions Si la liste des fonctions est passée, le tableau croisé dynamique résultant aura des colonnes hiérarchiques dont le niveau supérieur sont les noms de fonction (déduit des objets de fonction eux-mêmes)

Alors essayez

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()
         )

Vous souhaiterez peut-être renommer les colonnes hiérarchiques par la suite.

8
Happy001

Comme écrit dans la réponse approuvée par @ Happy001, aggfunc ne peut pas prendre dict est faux. nous pouvons en fait passer le dict à aggfunc.

Une fonctionnalité très pratique est la possibilité de passer un dictionary au aggfunc afin que vous puissiez exécuter différentes fonctions sur chacune des valeurs que vous sélectionnez. par exemple:

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

Dans le code ci-dessus, je passe dictionary à aggfunc et j'exécute len sur Quantity et mean, sum opérations sur Price.

Voici la sortie attachée:

enter image description here

L'exemple est tiré de tableau croisé expliqué.

16
Ganesh_

Essayez d'utiliser 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})
     )

Réglage as_index=False les laisse simplement sous forme de colonnes dans votre trame de données afin que vous n'ayez pas à réinitialiser l'index par la suite.

3
Alexander