我想用熊猫数据帧.plot(kind='bar')函数,用于在MxN数据帧中有多个索引时添加错误条。在
根据documentation,这可以通过为yerr
参数提供一个Mx2xN数组来实现,但是我没有幸为这个参数使用DataFrame。当然,对于误差条使用一个DataFrame(与数据的形状相同,但是有两个列表示上限和下限)将非常方便,因为它允许索引本身与数据匹配。在
目前,我只能通过使用newaxis和append这两个相当残酷的工具将高/低边界的列敲入Mx2xN numpy数组,才能让它正常工作。这充满了错误,语法也很难看,所以我的问题是:有没有更好的方法来完成我正在尝试的操作,而不必像我在这里所做的那样将数据帧敲入数组?在
要绘制的数据帧(在post底部生成的代码):
> print data
errlo errhi mean
letter a b a b a b
word
bar 7 5 12 11 9.5 8.0
foo 5 6 11 9 8.0 7.5
所需标绘代码:
^{pr2}$实际绘图代码-这是我希望可以改进的地方:
> errlo = data['mean'] - data['errlo']
> errhi = data['errhi'] - data['mean']
> errlo_arr = errlo.values[:,np.newaxis,:]
> errhi_arr = errhi.values[:,np.newaxis,:]
> yerr = np.append(errlo_arr, errhi_arr, axis=1).T
> data['mean'].plot(kind='bar', yerr=yerr)
期望输出:
生成数据帧的代码:
> ix3 = pd.MultiIndex.from_arrays([['a', 'a', 'a', 'a', 'b', 'b', 'b', 'b'], ['foo', 'foo', 'bar', 'bar', 'foo', 'foo', 'bar', 'bar']], names=['letter', 'word'])
> df3 = pd.DataFrame({'data1': [3, 2, 4, 3, 2, 4, 3, 2], 'data2': [6, 5, 7, 5, 4, 5, 6, 5]}, index=ix3)
> df=df3.groupby(level=['letter','word']).sum()
> df.columns=['errlo','errhi']
> df['mean']=df.mean(axis='columns')
> data=df.unstack(level='letter')
> print data
errlo errhi mean
letter a b a b a b
word
bar 7 5 12 11 9.5 8.0
foo 5 6 11 9 8.0 7.5
您可以直接使用列,并通过执行以下操作来避免
numpy
代码:退货:
相关问题 更多 >
编程相关推荐