Pandas Pivot Table Dictionary of Agg function
J'essaie de calculer 3 aggregative
fonctions pendant le pivotement:
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?
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.
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:
L'exemple est tiré de tableau croisé expliqué.
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.