Tabela dinâmica do Pandas para várias colunas ao mesmo tempo
Digamos que eu tenho um DataFrame:
nj ptype wd wpt
0 2 1 2 1
1 3 2 1 2
2 1 1 3 1
3 2 2 3 3
4 3 1 2 2
Eu gostaria de agregar esses dados usandoptype
como o índice assim:
nj wd wpt
1.0 2.0 3.0 1.0 2.0 3.0 1.0 2.0 3.0
ptype
1 1 1 1 0 2 1 2 1 0
2 0 1 1 1 0 1 0 1 1
Você pode criar cada uma das colunas de nível superior para o valor final criando uma tabela dinâmica comaggfunc='count'
e concatenando todos eles, assim:
nj = df.pivot_table(index='ptype', columns='nj', aggfunc='count').ix[:, 'wd']
wpt = df.pivot_table(index='ptype', columns='wpt', aggfunc='count').ix[:, 'wd']
wd = df.pivot_table(index='ptype', columns='wd', aggfunc='count').ix[:, 'nj']
out = pd.concat([nj, wd, wpt], axis=1, keys=['nj', 'wd', 'wpt']).fillna(0)
out.columns.names = [None, None]
print(out)
nj wd wpt
1 2 3 1 2 3 1 2 3
ptype
1 1.0 1.0 1.0 0.0 2.0 1.0 2.0 1.0 0.0
2 0.0 1.0 1.0 1.0 0.0 1.0 0.0 1.0 1.0
Mas eu realmente não gosto disso e parece errado. Gostaria de saber se existe uma maneira de fazer isso de uma maneira mais simples, de preferência com um método interno. Desde já, obrigado!