在保留原始列标题的同时旋转列

时间:2018-03-30 17:40:12

标签: python pandas pivot-table

我想按列和分组索引计算是和否的值。

我有这个数据框 :

col0  col1 col2
A     yes  no
A     no   no
B     yes  yes
B     yes  no

我想要这个:

   col1     col2
   yes  no  yes  no
A  1    1   0    2
B  2    0   1    1

我试过df.pivot_table(index='my_index', aggfunc='count') 但我只有

   col1     col2

A  2        2
B  2        2

1 个答案:

答案 0 :(得分:3)

选项1
pd.get_dummies + groupby + sum

v = pd.get_dummies(df.set_index('col0'))

v.columns = pd.MultiIndex.from_tuples(
    list(map(tuple, v.columns.str.split('_')))
)
v.sum(level=0)

     col1     col2    
       no yes   no yes
col0                  
A       1   1    2   0
B       0   2    1   1

选项2
stack + get_dummies + unstack

(df.set_index('col0')
   .stack()
   .str.get_dummies()
   .sum(level=[0,1])
   .unstack(-1)
   .swaplevel(0, 1, axis=1)
   .sort_index(level=0, axis=1)
)

     col1     col2    
       no yes   no yes
col0                  
A       1   1    2   0
B       0   2    1   1

选项3
@Wen

crosstab + concat
i = pd.crosstab(df.col0, df.col1.astype('category'))
j = pd.crosstab(df.col0, df.col2.astype('category'))

pd.concat([i, j], axis=1, keys=['col1','col2'])

     col1     col2    
col1   no yes   no yes
col0                  
A       1   1    2   0
B       0   2    1   1