python - Pandas - 将每一列单独分组

标签 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

非常感谢您的帮助!

最佳答案

col1 设置为索引轴。执行stack操作将其 reshape 为长格式的系列对象。

按生成的多索引系列的级别 0 和 1 进行分组,并计算它们各自的值计数。然后,unstack 并按行和列对索引进行排序,可以选择用 0 填充 NaN

(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。

关于python - Pandas - 将每一列单独分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41278156/

相关文章:

python - TensorFlow:如何在急切执行期间将 DeferredTensor 转换为 Tensor(以执行组标准化)?

python - Django Rest Framework 创建仅用于执行的 REST API

python - 如何在 pandas 中将系列整数转换为日期时间

python - 在 Pandas 中映射字典值

python - Biopython SeqIO 到 Pandas 数据框

Python Pandas Dataframe 数据透视表列和值顺序

python - Sklearn 将 Pandas Dataframe 和 CSR 矩阵拆分为测试和训练集

python - 在 Pandas 中从 datetime <[M8] 删除时间

python - 将 openCV python 函数转换为 C++

python - 替换/填充某些特定行的值