2017-11-22 30 views
0

複数の国の複数の人のデータを含むpandasデータフレームがあります。私がしようとしているのは、国ごとに区切られた各人の積み重ね棒グラフを作成することだけです。Matplotlib-積み重ね棒グラフを作成

person country sector  ex_sector 
jim  US    0.25 0.3333333 
tim  US  0.3333333   0.2 
john  US    0.9   0.9 
tom  US    0.2  0.25 
jim  UK    0.25 0.3333333 
tim  UK  0.3333333   0.4 
john  UK    0.1   0.1 
tom  UK    0.4  0.25 
jim  JP    0.5 0.3333333 
tim  JP  0.3333333   0.4 
john  JP    0   0 
tom  JP    0.4   0.5 

ので、私はちょうど私が得ることができるjimchart = df.loc[df['person'] == 'jim']をすればことを知っている:

person country sector ex_sector 
jim  US   0.25 0.3333333 
jim  UK   0.25 0.3333333 
jim  JP   0.5 0.3333333 

これは、最終目標はどうあるべきかです:

私のデータがどのように見えるか

enter image description here

これを行う最も効率的な方法は何ですか?セクターの列をプロットするだけで、各国をそれぞれのバーにプロットし、スタックしません。

他のドキュメントからは、各国が独自の列を持つようにテーブルを旋回させる必要があるようです。テーブルをもっと広くするようにします(私は例を使用しています。助けを感謝します!

+0

10列を持っていることについて間違っているのですか? – Goyo

+0

それを行う唯一の方法ですか? matplotlibがよりダイナミックになると思っていたので、私は自分のdfをスタックする必要がありますか? –

+0

私は実際にかなり混乱しています。私はこれにどのようにアプローチすべきだと思いますか?各国を列に設定しますか? –

答えて

0

IIUC:

In [61]: df.groupby('country')[['sector','ex_sector']].sum().T 
Out[61]: 
country   JP  UK  US 
sector  1.233333 1.083333 1.683333 
ex_sector 1.233333 1.083333 1.683333 

In [62]: df.groupby('country')[['sector','ex_sector']].sum().T.plot.bar(stacked=True, rot=0) 

enter image description here

関連する問題