所以我在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 创建一个类似于结构的哈希表。
答案 0 :(得分:1)
在结果上使用unstack
:
result2 = result.unstack()
reuslt2
然后B.plot()
result2.B.plot()
E.plot()
result2.E.plot()
答案 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()