对于数据框
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
花费零(或一)的时间百分比。我有一个可行的方法,但我认为必须有更直接的方法
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
。如果我对绘制百分比感兴趣,我不确定如何优雅地做到这一点。谢谢,
最佳答案
您可以在sns.barplot
estimator
中使用自己的函数,就像docs一样:
对于您而言,您可以将函数定义为lambda:
sns.barplot(x='group', y='Values', data=df, estimator=lambda x: sum(x==0)*100.0/len(x))