首页 > 解决方案 > 如何为分组数据框创建条形图(按三列)

问题描述

我有一个由三列(专业、大小和性别)组成的分组数据框,并且我对列(持续时间)的组求和。我想为每个单独的子图(条形图)profession,然后有:每个条形图的列和每个条形图Size的标签Gender。这是我的代码示例:在我的完整代码中,我有大约 30 个职业,所以我想遍历子图/职业,但我不知道如何:

data = {'Profession':['Teacher', 'Banker', 'Teacher', 'Judge','lawyer','Teacher'], 'Gender':['Male','Male', 'Female', 'Male','Male','Female'],'Size':['M','M','L','S','S','M'],'Duration':['5','6','2','3','4','7']} 
data2={'Profession':['Doctor', 'Scientist', 'Scientist', 'Banker','Judge','Scientist'], 'Gender':['Male','Male', 'Female','Female','Male','Male'],'Size':['L','M','L','M','L','L'],'Duration':['1','2','9','10','1','17']} 
data3 = {'Profession':['Banker', 'Banker', 'Doctor', 'Doctor','lawyer','Teacher'], 'Gender':['Male','Male', 'Female', 'Female','Female','Male'],'Size':['S','M','S','M','L','S'],'Duration':['15','8','5','2','11','10']} 
data4={'Profession':['Judge', 'Judge', 'Scientist', 'Banker','Judge','Scientist'], 'Gender':['Female','Female', 'Female','Female','Female','Female'],'Size':['M','S','L','S','M','S'],'Duration':['1','2','9','10','1','17']}
 df = pd.DataFrame(data) 
 df2=pd.DataFrame(data2)
 df3 = pd.DataFrame(data3) 
 df4=pd.DataFrame(data4)
 DATA=pd.concat([df,df2,df3,df4])
 DATA.groupby(['Profession','Size','Gender']).agg('sum')

分组表:

在此处输入图像描述

在此处输入图像描述

标签: pythondataframefor-loop

解决方案


你可以用这个seaborn包很容易地做到这一点(参见catplot函数)

import seaborn as sns

# Make sure your `Duration` column is an int:
DATA.Duration = DATA.Duration.astype(int)

# Do the grouping
DATA = DATA.groupby(['Profession','Size','Gender']).sum()

# Make sure all your variables are in the columns:
DATA = DATA.reset_index()

# Plot
sns.catplot(data=DATA, kind='bar', col='Profession', 
            x='Size', y='Duration', hue='Gender')

推荐阅读