You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:基于聚合Pandas DataFrame绘制指定分组柱状图遇KeyError

解决KeyError: '<lambda_0>'问题并绘制目标柱状图

问题根源

你碰到的报错是因为groupby.agg()生成的是多层索引(MultiIndex)列,lambda函数生成的列名不是单独的<lambda_0>,而是嵌套在identif_01层级下,完整的列标识是('identif_01', '<lambda_0>')。另外你代码里还犯了两个小错误:一是用了未定义的df(应该是grouped_df_identif),二是pandas的plot方法没有col参数。

修复方案

方案一:扁平化列索引(更直观)

先把多层列结构转成单层,方便后续访问和绘图:

# 把多层列名用下划线拼接成单层
grouped_df_identif.columns = ['_'.join(col) for col in grouped_df_identif.columns]
# 将groupby的索引转为普通列,方便指定X轴和分组字段
grouped_df_identif = grouped_df_identif.reset_index()

# 绘制对比柱状图
import matplotlib.pyplot as plt
grouped_df_identif.plot(kind='bar', x='clase_size_poly', y='identif_01_<lambda_0>', hue='index', figsize=(10,6))
plt.title('各clase_size_poly下不同index的<lambda_0>值对比')
plt.xlabel('clase_size_poly')
plt.ylabel('<lambda_0> 数值')
plt.legend(title='Index类型')
plt.show()

方案二:直接操作多层索引(不修改原结构)

如果不想改动DataFrame的列结构,可以通过多层索引直接定位目标列,再用unstack把index转为对比列:

import matplotlib.pyplot as plt
# 定位到lambda生成的列,再把index层级转为列
target_data = grouped_df_identif['identif_01']['<lambda_0>'].unstack(level='index')
# 绘制柱状图
target_data.plot(kind='bar', figsize=(10,6))
plt.title('各clase_size_poly下不同index的<lambda_0>值对比')
plt.xlabel('clase_size_poly')
plt.ylabel('<lambda_0> 数值')
plt.legend(title='Index类型')
plt.show()

内容的提问来源于stack exchange,提问作者Isa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 03:25:55