Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.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从2个非数字列创建堆叠条形图?_Python_Pandas_Matplotlib - Fatal编程技术网

如何使用python从2个非数字列创建堆叠条形图?

如何使用python从2个非数字列创建堆叠条形图?,python,pandas,matplotlib,Python,Pandas,Matplotlib,我有一个10000行200列的数据框。为简单起见,我选取了以下数据帧示例: df = {'Major':['Bachelor in Economics', 'Bachelor in Engineering', 'Bachelor in Finance', 'Bachelor in Biology', 'Bachelor in Economics', 'Bachelor in Engineering', 'Bachelor in Finance', 'Bachelo

我有一个10000行200列的数据框。为简单起见,我选取了以下数据帧示例:

df = {'Major':['Bachelor in Economics', 'Bachelor in Engineering', 'Bachelor in Finance', 'Bachelor in Biology', 
               'Bachelor in Economics', 'Bachelor in Engineering', 'Bachelor in Finance', 'Bachelor in Finance',
               'Bachelor in Economics', 'Bachelor in Engineering','Bachelor in Finance', 'Bachelor in Biology', 
               'Bachelor in Biology', 'Bachelor in Information Systems', 'Bachelor in Marketing'],
     'Gender':['Male', 'Female', 'Female', 'Female', 'Male', 'Female', 'Male', 'Female', 'Female', 'Male', 'Female', 'Male', 'Male', 'Female','Male']
     }

df = pd.DataFrame.from_dict(df)

我这里的问题是如何在python中基于性别标签绘制一个堆叠的条形图。预期结果是每个专业都有一个基于性别的堆叠条形图。如果有人能帮我做这件事,我将不胜感激。

您分组并计数,以获得每个专业的成绩:

df.groupby(['Major','Gender']).size().unstack()

Gender                Female Male
Major       
Bachelor in Biology     1.0 2.0
Bachelor in Economics   1.0 2.0
Bachelor in Engineering 2.0 1.0
Bachelor in Finance     3.0 1.0
Bachelor in Information Systems 1.0 NaN
Bachelor in Marketing   NaN 1.0
然后放到这个图上:

df.groupby(['Major','Gender']).size().unstack().plot.bar(stacked=True)

如果您需要百分比/比例,则可能更容易使用pd.crosstab:

pd.crosstab(df['Major'],df['Gender'],normalize='index').plot.bar(stacked=True)

你试过什么吗?你能分享吗?非常感谢你的回答。我想知道为什么y轴上的值介于0和4之间?我怎样才能得到每个专业中每个性别的百分比?哦,你想要百分比吗?而且不算数。。给我一点时间谢谢你的帮助。我真的很感激。最后一个问题,是否可以在每个条(注释)上方添加精确的值?可能会更复杂一些。你可以退房