我有一个带有两列AB的熊猫数据框。 B列包含三个类别XY,'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)

关于python - 分组后获得每一列的百分比,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53161212/

10-11 14:37