web-dev-qa-db-ja.com

Pandas Aggfuncのピボットテーブルリスト

Pandas Pivot Table Dictionary of Agg function

ピボット中に3つのaggregative関数を計算しようとしています:

  1. カウント
  2. 平均
  3. StDev

これはコードです:

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つの関数をどのように計算できますか?

10
Felix

pivot_tableaggfunc引数は、関数または関数のリストを受け取りますが、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()
         )

後で階層列の名前を変更することができます。

8
Happy001

@ Happy001による承認済みの回答に記載されているように、aggfuncdictをとることはできません。実際にdictaggfuncに渡すことができます。

本当に便利な機能は、dictionaryaggfuncに渡して、選択した各値に対して異なる関数を実行できることです。例えば:

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

上記のコードでは、dictionaryaggfuncに渡し、len操作をQuantityおよびmeansumPriceに対する操作。

ここに出力の添付があります:

enter image description here

例は 説明されたピボットテーブルから取得されます

16
Ganesh_

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は、これらをデータフレームの列として残すだけなので、後でインデックスをリセットする必要はありません。

3
Alexander