Pandas Pivot Table Dictionary of Agg function
ピボット中に3つのaggregative
関数を計算しようとしています:
これはコードです:
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()
)
私が得ているエラーは:KeyError: 'Mean'
これらの3つの関数をどのように計算できますか?
pivot_table
のaggfunc
引数は、関数または関数のリストを受け取りますが、dict
は受け取りません
aggfunc:関数、デフォルトのnumpy.mean、または関数のリスト関数のリストが渡された場合、結果のピボットテーブルには、最上位レベルが関数名(関数オブジェクト自体から推測される)である階層列が含まれます。
だから試して
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()
)
後で階層列の名前を変更することができます。
@ Happy001による承認済みの回答に記載されているように、aggfunc
はdict
をとることはできません。実際にdict
をaggfunc
に渡すことができます。
本当に便利な機能は、dictionary
をaggfunc
に渡して、選択した各値に対して異なる関数を実行できることです。例えば:
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
上記のコードでは、dictionary
をaggfunc
に渡し、len
操作をQuantity
およびmean
、sum
Price
に対する操作。
ここに出力の添付があります:
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})
)
設定as_index=False
は、これらをデータフレームの列として残すだけなので、後でインデックスをリセットする必要はありません。