Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 获取groupby之后每个列的百分比_Python_Python 3.x_Pandas_Data Visualization - Fatal编程技术网

Python 获取groupby之后每个列的百分比

Python 获取groupby之后每个列的百分比,python,python-3.x,pandas,data-visualization,Python,Python 3.x,Pandas,Data Visualization,我有一个熊猫数据框,有两列a和B。列B包含三个类别X,Y,“Z”。我需要检查a中每个组的特定值的百分比。下面是dataframe的外观: A B AA X BB Y CC Z AA Y AA Y BB Z .. .. 现在我想绘制一个堆叠图,但它应该是基于百分比的堆叠图,而不仅仅是基于计数的B中每个类别对应于a中的一个组。以下是我迄今为止所做的: df.groupby(['A'])['B'].value\u counts().unstack

我有一个熊猫数据框,有两列
a
B
。列
B
包含三个类别
X
Y
,“Z”。我需要检查a中每个组的特定值的百分比。下面是dataframe的外观:

  A   B
  AA  X 
  BB  Y
  CC  Z
  AA  Y
  AA  Y
  BB  Z 
  ..  ..
现在我想绘制一个堆叠图,但它应该是基于百分比的堆叠图,而不仅仅是基于计数的
B
中每个类别对应于
a
中的一个组。以下是我迄今为止所做的:

df.groupby(['A'])['B'].value\u 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)

有人提出了类似的问题。只需将
normalize=True
作为参数添加到
value\u counts
是的,我真傻。就这么简单。谢谢你,阿洛兹