使用Matplotlib绘制Pandas中groupby函数返回的数据

时间:2016-07-12 22:17:23

标签: python pandas matplotlib plot

所以我在pandas中使用groupby函数来使用基于另外两列的条件来获得两列的平均值。我在创建matplotlib图时遇到了麻烦

示例表是

data_temp = pd.DataFrame([
        [3, 16, 0, 0, 10],
        [3, 20, 0, 1, 11],
        [3, 25, 0, 2, 11],
        [3, 30, 0, 3, 15],
        [4, 30, 0, 0, 0],
        [4, 45, 0, 1, 0],
        [4, 54, 0, 2, 0],
        [4, 54, 0, 3, 0],
        [5, 31, 0, 0, 14],
        [5, 32, 0, 1, 15],
        [5, 45, 0, 2, 0],
        [5, 46, 0, 3, 0],
        [3, 1, 0, 0, 11],
        [3, 5, 0, 1, 12],
        [3, 6, 0, 2, 13],
        [3, 8, 0, 3, 11],
        [4, 35, 0, 0, 0],
        [4, 25, 0, 1, 0],
        [4, 34, 0, 2, 0],
        [4, 24, 0, 3, 0]
    ], columns=list('ABCDE'))


result = data_temp.groupby(['A', 'D']).agg({'B':'mean', 'E':'mean'})
print(result)

我得到了

        B     E
A D            
3 0   8.5  10.5
  1  12.5  11.5
  2  15.5  12.0
  3  19.0  13.0
4 0  32.5   0.0
  1  35.0   0.0
  2  44.0   0.0
  3  39.0   0.0
5 0  31.0  14.0
  1  32.0  15.0
  2  45.0   0.0
  3  46.0   0.0

现在我试图绘制数据,其中x轴= A y轴= B均值,我有4个图表,每个D值一个

类似地,在单独的情节中E的平均值

我尝试了几件事,但我面临的主要问题是groupby 创建一个类似于结构的哈希表。

enter image description here

2 个答案:

答案 0 :(得分:1)

在结果上使用unstack

result2 = result.unstack()
reuslt2

enter image description here

然后B.plot()

result2.B.plot()

enter image description here

E.plot()

result2.E.plot()

enter image description here

答案 1 :(得分:0)

这样的事情怎么样:

import matplotlib.pyplot as pp

data = A.groupby(['D','A'])['E','B'].mean().reset_index()

#For the plot of B vs A
fig, ax = pp.subplots()
for value, groups in data.groupby('D'):
     ax.plot(group.A,group.B)
pp.show()