Pandas中分组值的堆积直方图

时间:2017-01-12 20:08:40

标签: python pandas histogram

我正在尝试使用以下代码创建分组值的堆叠直方图:

titanic.groupby('Survived').Age.hist(stacked=True)

但我得到的这个直方图没有叠条。

enter image description here

如何在不必直接使用matplotlib或迭代群组的情况下将柱状图的条形图堆叠起来?

使用的数据集:https://www.udacity.com/api/nodes/5454512672/supplemental_media/titanic-datacsv/download

4 个答案:

答案 0 :(得分:9)

到目前为止,我发现的最佳方法是使用组创建一个新的数据框:

pd.DataFrame({'Non-Survivors': titanic.groupby('Survived').get_group(0).Age,
              'Survivors':   titanic.groupby('Survived').get_group(1).Age})
            .plot.hist(stacked=True)

enter image description here

答案 1 :(得分:4)

我定义了一个利用np.histogram的自定义函数 另请注意,直方图组是在'Survived'

组内计算的
def hist(x):
    h, e = np.histogram(x.dropna(), range=(0, 80))
    e = e.astype(int)
    return pd.Series(h, zip(e[:-1], e[1:]))

kw = dict(stacked=True, width=1, rot=45)
titanic.groupby('Survived').Age.apply(hist).unstack(0).plot.bar(**kw)

enter image description here

答案 2 :(得分:3)

此解决方案使用条形图而不是直方图,但我认为它可以为您提供所需的内容。

titanic.groupby(['Survived', pd.cut(titanic['Age'], np.arange(0,100,10))])\
       .size()\
       .unstack(0)\
       .plot.bar(stacked=True)

enter image description here

答案 3 :(得分:2)

改善答案,最好的方法可能是:

titanic.pivot(columns='Survived').Age.plot(kind = 'hist', stacked=True)

enter image description here