【发布时间】:2016-08-24 07:20:30
【问题描述】:
我已经设法从 groupby 中绘制子图。我有两列“A”和“B”,我想在子图上绘制它们(“B”中的每个值 1 个)及其各自的平均值。 我通过计数、删除重复项然后总结来准备我的数据(如果有更优雅的方法,请告诉我!)。
df = pd.DataFrame([[1, 'cat1'], [1, 'cat1'], [4, 'cat2'], [3, 'cat1'], [5, 'cat1'],[1, 'cat2']], columns=['A', 'B'])
df = df[['A','B']]
df['count'] = df.groupby(['A','B'])['A'].transform('count')
df = df.drop_duplicates(['A','B'])
df = df.groupby(['A','B']).sum()
然后我将它拆开并用子图绘制它:
plot = df.unstack().plot(kind='bar',subplots=True, sharex=True, sharey=True, layout = (3,3), legend=False)
plt.show(block=True)
我想为每个类别添加平均值,但我不知道: 1. 如何计算平均值。如果我在未堆叠的 groupby 上计算它,我会得到计数的平均值,而不是值“A”。 2. 一旦我得到平均值,我不知道如何将它绘制在同一个子图上。
欢迎任何帮助:)
--
按照 Nickil Maveli 的回答进行编辑: 我想要实现的是在 A 上绘制分组值的条形图,并在 B 上绘制一条带有平均值的垂直线。所以使用 Nickil Maveli 的图表,这将是:
根据我在 stackexchange 上的发现,我认为我应该使用 plt.axvline(mean, color='r', linestyle='--')。但是,我不知道如何调用每个情节的平均值不同。
【问题讨论】:
-
您可以添加数据样本吗?请查看How to make good reproducible pandas examples。
-
df = df_plot_zoom_cs.drop_duplicates(['A','B'])行完全覆盖了df,在此之前的一切都不再重要。这表明您没有验证您发布的代码是否有效。请参阅stackoverflow.com/help/mcve 获取有关如何发布问题的指导。 -
@piRSquared - 我认为这只是错字,原始数据农场被称为
df_plot_zoom_cs并且 OP 忘记更改它。 -
@jezrael 我应该更好;-)
-
哎呀,是的,会改变的!
标签: python pandas matplotlib plot