求助:基于聚合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
相关产品推荐
相关产品推荐

