2017-03-23 215 views
0

我有關於繪製分組的DataFrame數據的問題。條形圖分組熊貓

的數據是這樣的:

data = 

index taste food 

0  good  cheese 
1  bad  tomato 
2  worse tomato 
3  worse cheese 
4  good  meat 
5  good  meat 
6  bad  cheese 
7  worse tomato 
8  worse tomato 
9  good  cheese 
10  worse meat 
11  good  meat 

我想要做的是爲具有各自的味道類別爲x軸柱狀圖(好,壞,壞)和各食品 - 的百分比分佈在每個口味類別中鍵入欄。

因此,看着例如口味類別worse我們有:3 tomato,1 cheese和1 meat。總共有3 + 1 + 1 = 5食物類型中的類,並且因此:

3/5 = 60%tomato, 1/5 = 20%cheese和 1/5 = 20%meat

到目前爲止,我曾嘗試使用GroupByagg的東西,如:

df_1 = data.groupby(['taste', 'food']).agg({'taste' : 'count'}) 
df_2 = df_1.groupby(level=0).apply(lambda x: 100 * x/float(x.sum())) 

這似乎得到我想要的結果:

   taste 
taste food   
bad cheese 50.0 
     tomato 50.0 
good cheese 40.0 
     meat  60.0 
worse cheese 20.0 
     meat  20.0 
     tomato 60.0 

但是現在我被困在如何真正繪製這個!

在Excel中,它看起來是這樣的:

enter image description here

+0

是這個例子,可以幫助你嗎? http://seaborn.pydata.org/examples/factorplot_bars.html – Zealseeker

+0

謝謝@Zealseeker。我會看看。經典之作,在處理它並在此處輸入時找到自己問題的答案:) – gussilago

回答

0

我認爲你需要unstackDataFrame.plot.bar

df = df['taste'].unstack(0, fill_value=0) 
#remove index and column names if necessary 
df.index.name = None 
df.columns.name = None 
print (df) 
     bad good worse 
cheese 50.0 40.0 20.0 
meat  0.0 60.0 20.0 
tomato 50.0 0.0 60.0 

df.plot.bar(stacked=True) 

graph