Pandas GroupBy操作后分组列无法引用 如何实现可调用并生成新DataFrame
问题原因
你当前调用groupby聚合后,参与分组的Subcategory和year字段默认会被设为结果DataFrame的多级行索引(MultiIndex),而非普通数据列,因此无法直接通过列名引用。
解决方案
方法1:分组时添加as_index=False参数(最推荐)
在groupby方法中传入as_index=False,可以直接让分组键保留为普通数据列,不会被转为索引。
修改后的代码如下:
bikes = final_merged_df.loc[final_merged_df['Category'] == 'Bikes', ['year', 'Subcategory', 'Category', 'OrderQty']]\ .groupby([pandas.Grouper(key='Subcategory'), pandas.Grouper(key='year')], as_index=False)\ .sum()
运行后你就可以直接用bikes['Subcategory']调用对应字段,也可以直接作为绘图的颜色维度参数。
方法2:对已生成的聚合结果执行reset_index()
如果你已经生成了带多级索引的聚合结果,直接调用reset_index()即可把索引层级转为普通列:
# 针对你原有代码生成的带多级索引的bikes执行 bikes = bikes.reset_index()
执行后两个分组字段就会变成普通列,和聚合统计列平级。
方法3(仅临时使用场景):直接从索引取值
如果不想修改表结构,临时需要引用分组键的话,可以从多级索引中提取对应层级的值:
# 提取Subcategory维度的值 subcategory_vals = bikes.index.get_level_values('Subcategory') # 提取year维度的值 year_vals = bikes.index.get_level_values('year')
绘图时直接把提取出的序列传给对应的维度参数即可。
内容的提问来源于stack exchange,提问作者Mike Zoucha
相关产品推荐
相关产品推荐

