列标题,如数据透视表

时间:2016-12-20 06:37:54

标签: python pandas

我试图找出访问我商店的成员等级组合。

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

如何生成像Excel Pivot表这样的结果,以便Grade(A,B,C)的类别是列标题?这假设我有很多成员等级。

1 个答案:

答案 0 :(得分:1)

我认为您可以将groupbysize一起使用,然后通过unstack重新塑造:

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的解决方案:

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

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