2016-02-29 168 views
1

繪製百分比對於一個數據幀的Python:在seaborn柱狀圖中

import pandas as pd 
df=pd.DataFrame({'group':list("AADABCBCCCD"),'Values':[1,0,1,0,1,0,0,1,0,1,0]}) 

我想繪製的時間A, B, C, D一個barplot顯示比例接受零(或一個)。

我有一個圍着它的工作方式,但我想,必須有更直接的方式

tempdf=df.groupby(['group','Values']).Values.count().unstack().fillna(0) 
tempdf['total']=df['group'].value_counts() 
tempdf['percent']=tempdf[0]/tempdf['total']*100 

tempdf.reset_index(inplace=True) 
print tempdf 

sns.barplot(x='group',y='percent',data=tempdf) 

如果陰謀只是平均值,我可以簡單地做sns.barplot上比tempdf df數據幀。如果我對繪製百分比感興趣,我不確定如何優雅地做到這一點。

感謝,

回答

2

你可以使用自己的功能sns.barplotestimator,從docs

估計:調用該地圖矢量 - >標量,可選
統計功能內估計每個分類箱。

對於你情況下你可以定義功能的λ:

sns.barplot(x='group', y='Values', data=df, estimator=lambda x: sum(x==0)*100.0/len(x)) 

enter image description here

+0

感謝@anton。這工作幾乎完美。除了給出沒有浮點值的小問題,但包括'1.0'作品'sns.barplot(x ='group',y ='Values',data = df,estimator = lambda x:sum(x == 0 )* 1.0/len(x))' – PagMax

+0

@PagMax我使用Python 3.x,所以我沒有,如果你使用python 2,你應該像你一樣添加'1.0'或者if你需要百分比,你可以乘以100.0。 –

+0

謝謝,我明白不同之處。是的,我正在使用python'2.x',並且乘以'100.0'也可以,但是必須在像sum(x == 0)* 100.0/len(x)'而不是'sum( X == 0)/ LEN(x)的* 100.0'。無論如何,問題解決了,非常感謝你的幫助。 – PagMax