我有一个带有两列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)
关于python - 分组后获得每一列的百分比,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53161212/