首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Python语言中显示DataFrame中每一列的值的比例

在Python语言中显示DataFrame中每一列的值的比例
EN

Stack Overflow用户
提问于 2020-11-07 21:31:48
回答 1查看 52关注 0票数 0

我已经创建了以下DataFrame:

代码语言:javascript
复制
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表示。如下所示:

代码语言:javascript
复制
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'))

然而,有没有更简洁的方式来编码呢?例如,不管怎样,要把上面的代码变成一个循环吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-08 00:17:30

这似乎是最有效的方法。从缩短的角度来说,这是你想要的吗?它实际上是你的解决方案,只是通过理解来压缩。

代码语言:javascript
复制
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)

这导致了

代码语言:javascript
复制
   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  
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64728190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档