首页 > 解决方案 > 在groupby之后获取每列的百分比

问题描述

我有一个带有两列AB. 该列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),)结果绘制为堆积条形图。有人可以帮忙吗?

标签: pythonpython-3.xpandasdata-visualization

解决方案


您可以找到逐行总和并沿轴除以如下所示:

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)

推荐阅读