Python 熊猫群比后如何绘制聚合结果?

Python 熊猫群比后如何绘制聚合结果?,python,pandas,matplotlib,Python,Pandas,Matplotlib,我最近开始学习熊猫,在使用groupby和agg之后,我在如何绘制结果方面遇到了一些麻烦。使用Pandas,我创建了一个数据框,并根据两列“ID”和“x”对其进行分组。然后我从小组中选择一个特定的列(“结果”)来计算sem和平均值 具体而言,守则: df = pd.read_csv('pandas_2015-11-7.csv') df_group = df.groupby(['x','ID'])['results'] df_group_result

我最近开始学习熊猫,在使用groupbyagg之后,我在如何绘制结果方面遇到了一些麻烦。使用Pandas,我创建了一个数据框,并根据两列“ID”和“x”对其进行分组。然后我从小组中选择一个特定的列(“结果”)来计算sem和平均值

具体而言,守则:

df = pd.read_csv('pandas_2015-11-7.csv')              
df_group = df.groupby(['x','ID'])['results']          
df_group_results = df_group.agg([stats.sem, np.mean]) 
结果如下所示:

            sem      mean
x    ID                    
2.5  0     0.010606  0.226674
     1     0.000369  0.490820
     2     0.000508  0.494094
5.0  0     0.001672  0.005059
     1     0.012252  0.190962
     2     0.003696  0.170342
7.5  0     0.001630  0.004506
     1     0.002567  0.016109
     2     0.002081  0.047301
10.0 0     0.000000  0.000000
     1     0.000000  0.000000
     2     0.000000  0.000000
12.5 0     0.000000  0.000000
     1     0.000000  0.000000
     2     0.000000  0.000000
我的问题是如何根据这些结果绘制带有误差条的线图?x轴应以“x”值为基础,“ID”确定线条(在本例中为3条线条,图例为0、1和2)。我想要达到的效果是这样的
(来源:)
.

groupby()方法返回分层索引(多索引):

如果我创建了一个具有类似层次索引的df:

import pandas as pd
df = pd.DataFrame({'mean':[0.5,0.25,0.7,0.8],'sem':[0.1,0.1,0.1,0.2]})
df.index = pd.MultiIndex(levels=[[2.5,5.0],[0,1]],labels=[[0,0,1,1],[0,1,0,1]],names=['x','ID'])
那么我有以下的df:

        mean  sem
x   ID           
2.5 0   0.50  0.1
    1   0.25  0.1
5.0 0   0.70  0.1
    1   0.80  0.2
我可以从多索引中获取相关信息,并使用它按顺序选择和绘制正确的行:

x_values = df.index.levels[0]
ID_values = df.index.levels[1]

for ID in ID_values:
    mean_data = df.loc[[(x,ID) for x in x_values],'mean'].tolist()
    error_data = df.loc[[(x,ID) for x in x_values],'sem'].tolist()
    matplotlib.pyplot.errorbar(x_values,mean_data,yerr=error_data)

legend(ID_values)

谢谢这是有道理的。我想指出的一个小错误是,我想你的意思是说(x,ID)而不是(ID,x)。