gpt4 book ai didi

python - 使用多索引 DataFrame 绘制不对称误差线

转载 作者:太空宇宙 更新时间:2023-11-04 05:54:21 25 4
gpt4 key购买 nike

当我在 MxN DataFrame 中有一个多索引时,我正在尝试使用 pandas DataFrame.plot(kind='bar') 函数添加错误栏。

根据documentation ,这可以通过为 yerr 参数提供 Mx2xN 数组来实现,但我没有为这个参数使用 DataFrame。将 DataFrame 用于误差条(与数据形状相同,但有 2 列用于上限和下限)当然会非常方便,因为它允许索引本身与数据匹配。

就目前而言,我只能通过使用相当残酷的 newaxis 和 append 工具将高/低边界的列打成 Mx2xN numpy 数组来让它工作。这充满了错误,而且语法难看,所以我的问题是:是否有更好的方法来做我想做的事情,而不必像我在这里所做的那样将 DataFrame 打入数组?

要绘制的数据框(在文章底部生成的代码):

> 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

所需的绘图代码:

> data['mean'].plot(kind='bar', yerr=data['errlo','errhi'])

实际绘图代码 - 这是我希望可以改进的地方:

> 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)

期望的输出: Bar plot of dataframe with multi-indexed columns, with error bars

生成DataFrame的代码:

> 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 代码:

#assuming your initial frame
df =df3.groupby(level=['letter','word']).sum()
df.columns=['errlo','errhi']
df['mean']=df.mean(axis='columns')


df['errlo'] = df['mean'] - df['errlo']
df['errhi'] = df['errhi'] - df['mean']

data=df.unstack(level='letter')

data['mean'].plot(kind='bar', yerr=data[['errlo','errhi']].T.values)

返回:

enter image description here

关于python - 使用多索引 DataFrame 绘制不对称误差线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28627823/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com