首页 > 解决方案 > 有没有办法通过 groupby 绘制几个条形图?

问题描述

train['Name_title'].groupby(pd.qcut(train['Name_Len'],5)).value_counts(normalize = True)

部分输出是:

Name_Len        Name_title
(11.999, 19.0]  Mr.           0.803922
                Miss.         0.151961
                Mrs.          0.019608
                Master.       0.009804
                Col.          0.004902
                Dr.           0.004902
                Rev.          0.004902
(19.0, 23.0]    Mr.           0.698718
                Miss.         0.237179
                Master.       0.025641
                Mrs.          0.019231
                Dr.           0.006410
                Mlle.         0.006410
                Rev.          0.006410

我想绘制每个组的每个标题的比例。有什么办法可以直接做到吗?

先感谢您。

标签: pythonpandasseaborn

解决方案


您可以使用交叉表来制表并使用带有 堆叠=True 的熊猫图:

np.random.seed(111)

train = pd.DataFrame({'Name_title':np.random.choice(['Mr','Mrs','Miss'],20),
                     'Name_Len':np.random.uniform(1,50,20)})

pd.crosstab(pd.qcut(train['Name_Len'],5),
            train['Name_title'],normalize='index').plot.bar(stacked=True)

在此处输入图像描述

如果你 unstack 它也可以工作:

train['Name_title'].groupby(
    pd.qcut(train['Name_Len'],5)
).value_counts(normalize = True).unstack().plot.bar(stacked=True)

推荐阅读