应用 pandas groupby 后,在绘图中添加条形以显示平均值

Posted

技术标签:

【中文标题】应用 pandas groupby 后,在绘图中添加条形以显示平均值【英文标题】:Add bars to a plot to show averages after applying pandas groupby 【发布时间】:2019-04-26 08:35:46 【问题描述】:

我有一个示例数据框:

test = pd.DataFrame('cluster':['1','1','1','1','2','2','2','2','2','3','3','3'],
                 'type':['a','b','c','a','a','b','c','c','a','b','c','a'])

然后我使用 groupby 绘制每个集群的类型值百分比:

pct_col = test.groupby(['cluster','type'])['type'].count()/(test.groupby('cluster').size())*100 # don't reset the index!
test = test.set_index(['cluster', 'type']) # make the same index here
test['count %'] = pct_col
test = test.reset_index() # to take the hierarchical index off again
sns.catplot(x="cluster", y="count %", hue="type", kind="bar", data=test)

如何根据整个数据集添加额外的三个条形图,显示每种类型的平均值 --> test.groupby('type')['type'].count()/(len(test))*100

感谢您的帮助!

【问题讨论】:

【参考方案1】:

使用crosstab

pd.crosstab(test.cluster,test.type,normalize='index',margins=True)
Out[305]: 
type            a         b         c
cluster                              
1        0.500000  0.250000  0.250000
2        0.400000  0.200000  0.400000
3        0.333333  0.333333  0.333333
All      0.416667  0.250000  0.333333

#pd.crosstab(test.cluster,test.type,normalize='index',margins=True).mul(100).stack()

更新我认为pandas 的情节很容易

pd.crosstab(test.cluster,test.type,normalize='index',margins=True).plot(kind='bar')

【讨论】:

问题是关于在同一个图上绘制这些数字。 @aviss 检查输出呵呵。

以上是关于应用 pandas groupby 后,在绘图中添加条形以显示平均值的主要内容,如果未能解决你的问题,请参考以下文章

在 pandas groupby 绘图栏中重新排序星期几

Pandas GroupBy 的绘图结果

python pandas groupby分组后的数据怎么用

pandas之折线图(plot)

在 pandas groupby 之后并行化应用

使用函数在 Pandas 中添加一列[重复]