在Python中显示DataFrame中每列值的比例



我创建了以下DataFrame:

dataset = pd.DataFrame(np.random.randint(0,3,size=(5, 8)), columns=list('ABCDEFGH'))

现在我想显示每列中每个值(0,1,2(的比例。理想情况下,我想将其表示为堆叠条形图-x轴上的列名(因此从a到H总共有8个条形图(,条形图上的不同颜色代表每个值的比例(0,1,2(。

做这件事最简单/最简洁的方法是什么?

编辑:我找到了一种简单的方法来表示比例——不是用条形图,而是用DataFrame。见下文:

df = pd.concat([dataset['A'].value_counts(normalize=True).mul(100),
dataset['B'].value_counts(normalize=True).mul(100),
dataset['C'].value_counts(normalize=True).mul(100),
dataset['D'].value_counts(normalize=True).mul(100),
dataset['E'].value_counts(normalize=True).mul(100),
dataset['F'].value_counts(normalize=True).mul(100),
dataset['G'].value_counts(normalize=True).mul(100),
dataset['H'].value_counts(normalize=True).mul(100)],
axis=1,keys=('proportions A','proportions B',
'proportions C', 'proportions D',
'proportions E', 'proportions F',
'proportions G', 'proportions H'))

然而,有没有一种更简洁的编码方法呢?例如,无论如何都要把上面的代码变成一个循环?

这似乎是最有效的方法。就缩短而言,这就是你想要的吗?这真的是你的解决方案,只是通过理解来浓缩。

df = pd.concat([dataset[colid].value_counts(normalize=True).mul(100) for colid in list('ABCDEFGH')],
axis=1,keys=('proportions ' + colid for colid in list('ABCDEFGH')))
print(df)

导致

proportions A  proportions B  proportions C  proportions D  proportions E  
0            NaN           20.0            NaN           60.0           20.0   
1           80.0           40.0           40.0           20.0           40.0   
2           20.0           40.0           60.0           20.0           40.0   
proportions F  proportions G  proportions H  
0           20.0           40.0           80.0  
1           40.0           40.0           20.0  
2           40.0           20.0            NaN  

最新更新