python - 如何为分组数据框创建条形图(按三列)
问题描述
我有一个由三列(专业、大小和性别)组成的分组数据框,并且我对列(持续时间)的组求和。我想为每个单独的子图(条形图)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')
分组表:
解决方案
你可以用这个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')
推荐阅读
- javascript - 标记完成加载后是否有回调?
- jenkins - 如何移动到詹金斯管道中的不同目录
- c++ - 将巨大的文本缓冲区加载到 QPlainTextEdit
- networking - 为什么 CSMA/CD 不公平?
- elm - 我无法解析 Elm 中的嵌套结构
- json - 我正在从文件加载 JSON 数据。然后尝试解码与 Key 对应的值之一
- arrays - 如何迭代一个集合并使用每个值来更新另一个集合中的文档数组?
- kernel - 将 seccomp_export_bpf 生成的代码加载到内核中
- javascript - 试图将 var 值从函数传递到 AJAX url
- docker - 亚马逊 ec2 中的 docker app 此站点无法提供安全连接