对于数据框

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))

Python:在海洋条形图中绘制百分比-LMLPHP

10-07 12:35