首页 > 解决方案 > Pandas Dataframe 使用分类数据创建 Seaborn 水平条形图

问题描述

我目前正在使用这样的数据框:

在此处输入图像描述

我想要的是显示Victory列的总数,其中值 S 按AGE_GROUP分组并由GENDER区分,类似于以下水平条形图:

在此处输入图像描述

到目前为止,我可以获得以下图表:

在此处输入图像描述

按照以下步骤:

victory_df = main_df[main_df["VICTORY"] == "S"]
victory_count = victory_df["AGE_GROUP"].value_counts()
sns.set(style="darkgrid")
sns.barplot(victory_count.index, victory_count.values, alpha=0.9)

我应该使用哪种策略来按性别区分 value_count 并将其包含在图表中?

标签: pandasgroup-bybar-chartseaborncategorical-data

解决方案


这显然有助于提供原始数据而不是图像。想出了自己的数据。不确定是否理解您的问题,但我在下面的尝试。

数据

df=pd.DataFrame.from_dict({'VICTORY':['S', 'S', 'N', 'N', 'N', 'S', 'N', 'S', 'N', 'S', 'N', 'S', 'S'],'AGE':[5., 88., 12., 19., 30., 43., 77., 50., 78., 34., 45.,  9., 67.],'AGE_GROUP':['0-13', '65+', '0-13', '18-35', '18-35', '36-64', '65+', '36-64','65+', '18-35', '36-64', '0-13', '65+'],'GENDER':['M', 'M', 'F', 'M', 'F', 'F', 'M', 'F', 'F', 'F', 'M', 'M', 'F']})

绘图。我按 AGE_GROUP 分组,值计数GENDER,取消堆叠并绘制堆叠的水平条形图。Seaborn 是建立在 matplotlib 之上的,当在 seaborn 中绘图并不像堆叠的单杠那样简单时,我会退回到 matplotlib。希望你不要冒犯。

   df[df['VICTORY']=='S'].groupby('AGE_GROUP')['GENDER'].apply(lambda x: x.value_counts()).unstack().plot(kind='barh', stacked=True)

plt.xlabel('Count')
plt.title('xxxx')

输出

在此处输入图像描述


推荐阅读