Python 从列计数中提取直方图

Python 从列计数中提取直方图,python,pandas,Python,Pandas,我有一个由6500列组成的大数据框,其中一列是类标签,其余是0或1的布尔值,数据框是稀疏的 例如: df = pd.DataFrame({ 'label' : ['a', 'b', 'c', 'b','a', 'c', 'b', 'a'], 'x1' : np.random.choice(2, 8), 'x2' : np.random.choice(2, 8), 'x3' : np.random.ch

我有一个由6500列组成的大数据框,其中一列是类标签,其余是0或1的布尔值,数据框是稀疏的

例如:

df = pd.DataFrame({
            'label' : ['a', 'b', 'c', 'b','a', 'c', 'b', 'a'],
            'x1' : np.random.choice(2, 8),
            'x2' : np.random.choice(2, 8),
            'x3' : np.random.choice(2, 8)})
我想要的是一个报告(最好是熊猫,这样我可以很容易地打印出来),它显示了按标签分组的列的唯一元素的总和

例如,这个数据框:

    x1  x2  x3  label
0   0   1   1   a
1   1   0   1   b
2   0   1   0   c
3   1   0   0   b
4   1   1   1   a
5   0   0   1   c
6   1   0   0   b
7   0   1   0   a
结果应该是这样的:

a: 3 (since it has x1, x2 and x3)
b: 2 (since it has x1, x3)
c: 2 (since it has x2, x3)

所以这是一种计数,每个标签中都有哪些列。想象一个直方图,其中x轴是
标签
,y轴是
列数

您可以尝试旋转:

label = df.groupby('label')
for key,val in label.count()['x1'].iteritems():
    strg = '%s:%s' %(key,val)
    for col,vl in label.sum().ix[key].iteritems():
        if vl!=0:
            strg += ' %s'%col
    print strg
import pandas as pd
import numpy as np

df = pd.DataFrame({
        'label' : ['a', 'b', 'c', 'b','a', 'c', 'b', 'a'],
        'x1' : np.random.choice(2, 8),
        'x2' : np.random.choice(2, 8),
        'x3' : np.random.choice(2, 8)})

pd.pivot_table(df, index='label').transpose().apply(np.count_nonzero)
对于df:

label   x1  x2  x3
0   a   0   0   0
1   b   0   1   0
2   c   1   0   1
3   b   0   1   0
4   a   1   1   1
5   c   1   0   1
6   b   0   1   0
7   a   1   1   1
结果是:

label
a    3
b    1
c    2
dtype: int64

很棒的解决方案。我喜欢它依附于熊猫/裸体的环境,而且它的速度也非常快。谢谢你也给了我关于旋转的见解。在考虑之前从未使用过它,您可以删除转置,只需在应用中使用axis=1。很高兴我能帮忙。