Pandas groupby后用yerr绘制误差棒出现ConversionError问题
解决pandas绘制带误差棒柱状图的索引报错问题
问题原因
pandas.DataFrame.plot()的yerr参数无法像y参数那样直接解析多层列索引的元组格式,它需要接收数值型的数组或Series,而非索引元组,这是导致报错的核心原因。
解决方案
直接提取聚合后DataFrame中对应变量的标准差列,作为yerr的输入值即可。
完整示例代码
import pandas as pd from numpy import mean, std # 创建示例数据 df = pd.DataFrame({ 'U': [1, 2, 3, 4], 'V': [5, 6, 7, 8], 'grp': [1, 1, 2, 2] }) # 按分组聚合均值和标准差,得到多层列索引的DataFrame uv_agg = df.groupby('grp').agg([mean, std]) # 绘制U变量的带误差棒柱状图 uv_agg.plot(kind='bar', y=('U', 'mean'), yerr=uv_agg[('U', 'std')])
扩展:同时绘制多个变量的误差棒
如果需要一次性绘制所有变量(如U和V)的带误差棒柱状图,可以用xs方法批量提取均值和标准差列:
# 提取所有变量的均值列作为y值,标准差列作为误差棒 ax = uv_agg.xs('mean', axis=1, level=1).plot(kind='bar', yerr=uv_agg.xs('std', axis=1, level=1))
内容的提问来源于stack exchange,提问作者Sanjay Manohar
相关产品推荐
相关产品推荐

