我已经创建了以下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'))然而,有没有更简洁的方式来编码呢?例如,不管怎样,要把上面的代码变成一个循环吗?
发布于 2020-11-08 00:17:30
这似乎是最有效的方法。从缩短的角度来说,这是你想要的吗?它实际上是你的解决方案,只是通过理解来压缩。
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 https://stackoverflow.com/questions/64728190
复制相似问题