python - 在groupby之后获取每列的百分比
问题描述
我有一个带有两列A
和B
. 该列B
包含三个类别X
, Y
, 'Z'。我需要检查 A 中每个组的特定值的百分比是多少。这是数据框的样子:
A B
AA X
BB Y
CC Z
AA Y
AA Y
BB Z
.. ..
现在我想绘制一个堆积图,但它应该是一个基于百分比的堆积图,而不仅仅是基于每个类别的计数,B
对应于A
. 这是我到目前为止所做的:
df.groupby(['A'])['B'].value_counts().unstack()
这给了我这个
B X Y Z
A
AA 65 666 5
BB 123 475 6
CC 267 1337 40
现在我想将每一列除以第一行的相应行的总和,并将(65/(65+666+5), 666/(65+666+5), 5/(65+666+5),)
结果绘制为堆积条形图。有人可以帮忙吗?
解决方案
您可以找到逐行总和并沿轴除以如下所示:
freq_df = df.groupby(['A'])['B'].value_counts().unstack()
pct_df = freq_df.divide(freq_df.sum(axis=1), axis=0)
然后绘制你应该能够简单地使用
pct_df.plot(kind="bar", stacked=True)
推荐阅读
- spring - 关于 net::ERR_CERT_DATE_INVALID 使用 Spring Framework 制作 Board 时出错
- google-cloud-platform - Google Cloud Build - 多个环境
- javascript - new Date().getTimezoneOffset() 和 new Date(string).getTimezoneOffset() 有什么区别?
- .net - 如何使用 IBM.XMS for .NET Client 将 IBytesMessage 保存到 IBM MQ 中的文件
- android - 如何使用 FCM 支持多用户 Android 应用程序?
- java - 我们如何使用 Criteria Query 在 Spring JPA 中查询一对多关系
- python - 如何在python中创建自定义int类型
- java - 连接元素节点由相同的状态名称组成一个元素节点
- flutter - 颤动刷新小部件的内容,但它仍然是旧数据
- python - 如何从数据集中提取特定行并附加到另一个列表中