熊猫 - 将每列分组

时间:2016-12-22 07:48:53

标签: python pandas

这是我的数据框:

    col1  col2  col3  col4  
0   True  False True  True
1   True  True  False False 
2   False False True  False 
3   True  True  False True  

有没有办法对我的数据进行分组,以便得到类似下面的内容,其中表中的数字是出现次数:

       col2         col3        col4  
       True False   True False  True False
col1         
True   2    1       x    x      x    x
False  0    1       x    x      x    x

非常感谢你的帮助!

1 个答案:

答案 0 :(得分:2)

col1设置为索引轴。执行stack操作以将其重新整形为长格式化的系列对象。

生成多索引系列的Groupby级别0和1并计算它们各自的值计数。然后,unstack并对索引行和列进行排序,可选择将NaNs填充为0。

(df.set_index('col1').stack().groupby(level=[0,1]).value_counts().unstack(level=[1,2])
   .sort_index(ascending=False, axis=1).sort_index(ascending=False).fillna(0).astype(int))

enter image description here

@jezrael的每条评论的进一步简化解决方案:

(df.set_index('col1').stack().groupby(level=[0,1]).value_counts()
   .sort_index(ascending=[False, True, False]).unstack([1,2]).fillna(0).astype(int))

enter image description here

此外,您可以按降序对索引轴进行排序,以获得所需的o / p。