Crosstab을 이용하여 집계 (존재하지 않는 값 포함)¶
- 존재하지 않는 값을 포함하여 crosstab을 할 필요가 있다.
- 이러한 경우에는 pd.Series를 이용하여 컬럼을 만들어준다.
In [60]:
import pandas as pd
import numpy as np
In [61]:
df = pd.DataFrame({'CODE' : ['a','b','c','d','e','e','b'], 'Q' : [2,3,3,2,1,2,3]})
In [62]:
df
Out[62]:
In [63]:
df1 = pd.crosstab(index = df.CODE, columns = pd.Series([0,1,2,3,4,5]), values = df.Q, aggfunc = 'sum')
df1
Out[63]:
In [64]:
df2 = df1.fillna(0)
df2
Out[64]:
- 전체를 대상으로 퍼센티지를 구한다.
In [65]:
df3 = pd.crosstab(index = df.CODE, columns = pd.Series([0,1,2,3,4,5]), values = df.Q, aggfunc = 'sum', normalize='all')
df3
Out[65]:
- 컬럼이나 행을 기준으로 퍼센티지를 구한다.
In [49]:
df4 = pd.crosstab(index = df.CODE, columns = pd.Series([0,1,2,3,4,5]), values = df.Q, aggfunc = 'sum', normalize='index')
df4
Out[49]:
In [51]:
df5 = pd.crosstab(index = df.CODE, columns = pd.Series([0,1,2,3,4,5]), values = df.Q, aggfunc = 'sum', normalize='columns')
df5
Out[51]:
- TOTAL을 구할수도 있다.
In [56]:
df6 = pd.crosstab(index = df.CODE, columns = pd.Series([0,1,2,3,4,5]), values = df.Q, aggfunc = 'sum', normalize='index', margins=True, margins_name='TOTAL')
df6
Out[56]:
In [58]:
df7 = pd.crosstab(index = df.CODE, columns = pd.Series([0,1,2,3,4,5]), values = df.Q, aggfunc = 'sum', normalize='columns', margins=True, margins_name='TOTAL')
df7
Out[58]: