2016-12-20 3 views
0

私は自分の店を訪れるメンバーの成績の組み合わせを調べようとしています。ピボットテーブルのような列ヘッダー

import pandas as pd 

df=pd.DataFrame({'MbrID':['M1','M2','M3','M4','M5','M6','M7'] 
        ,'Store':['PAR','TPM','AMK','TPM','PAR','PAR','AMK'] 
        ,'Grade':['A','A','B','A','C','A','C']}) 
df=df[['MbrID','Store','Grade']] 
print(df) 

df.groupby('Store').agg({'Grade':pd.Series.nunique}) 

以下は、データフレームとgroupby関数の結果です。

enter image description here

どのようにグレード(A、B、C)のカテゴリが列ヘッダーであるように、エクセルピボットテーブルのような結果を生成しますか?これは私がメンバーのグレードがかなり広いと仮定しています。

答えて

1

は、私はあなたがunstackによってsizeと整形でgroupbyを使用することができると思う:

df2 = pd.crosstab(df.Store, df.Grade) 
print (df2) 
Grade A B C 
Store   
AMK 0 1 1 
PAR 2 0 1 
TPM 2 0 0 

pivot_tableで:

df1 = df.groupby(['Store','Grade'])['Grade'].size().unstack(fill_value=0) 
print (df1) 
Grade A B C 
Store   
AMK 0 1 1 
PAR 2 0 1 
TPM 2 0 0 

ソリューションcrosstab

df3 = df.pivot_table(index='Store', 
        columns='Grade', 
        values='MbrID', 
        aggfunc=len, 
        fill_value=0) 
print (df3) 
Grade A B C 
Store   
AMK 0 1 1 
PAR 2 0 1 
TPM 2 0 0 
+0

私がもしわかりませんあなたの質問を理解する、caあなたの出力が何か他のものなら、あなたは望みの出力を追加しますか?ありがとうございました。 – jezrael

+0

は、実際には列を格納してグレードするだけです。 mbr ID列は、理解を深めるためのものです。希望出力はインデックスとしてのストアコード、カラムヘッダーとしてのmbrグレード、値は各ストアのグレード数です – unclegood

+0

wow、クロス集計はこのために特別に作られています! – unclegood

関連する問題