web-dev-qa-db-ja.com

Pandas)のグループ化された値の積み上げヒストグラム

このコードを使用して、グループ化された値の積み上げヒストグラムを作成しようとしています。

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

しかし、積み上げ棒なしでこのヒストグラムを取得しています。

enter image description here

Matplotlibを直接使用したり、グループを反復処理したりせずに、ヒストグラムのバーをスタックするにはどうすればよいですか?

使用したデータセット: https://www.udacity.com/api/nodes/5454512672/supplemental_media/titanic-datacsv/download

12
leokury

答えを改善してください。最善の方法は次のとおりです。

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

enter image description here

5
Qianbo Wang

これまでに見つけた最善の方法は、グループを使用して新しいデータフレームを作成することです。

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

10
leokury

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

4
piRSquared

このソリューションでは、ヒストグラムの代わりに棒グラフを使用しますが、探しているものが得られると思います。

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

enter image description here

3
Ted Petrou