Pandas中groupby后用.loc访问多级索引触发KeyError问题求助
问题描述
执行groupby操作得到多级索引结果后,使用.loc访问指定索引值时触发KeyError错误。
代码示例
import numpy as np import pandas as pd retail = pd.read_csv('online_retail2.csv') retail.groupby(['Country','Description'])['Quantity','Price'].agg([np.mean,max]) retail.loc[('Australia','DOLLY GIRL BEAKER'),('Quantity','mean')]
groupby输出结果
Quantity Price mean max mean max Country Description Australia DOLLY GIRL BEAKER 200.0 200 1.08 1.08 I LOVE LONDON MINI BACKPACK 4.0 4 4.15 4.15 10 COLOUR SPACEBOY PEN 48.0 48 0.85 0.85 12 PENCIL SMALL TUBE WOODLAND 384.0 384 0.55 0.55 12 PENCILS SMALL TUBE RED SPOTTY 24.0 24 0.65 0.65 ... ... ... ... West Indies VINTAGE BEAD PINK SCARF 3.0 3 7.95 7.95 WHITE AND BLUE CERAMIC OIL BURNER 6.0 6 1.25 1.25 WOODLAND PARTY BAG + STICKER SET 1.0 1 1.65 1.65 WOVEN BERRIES CUSHION COVER 2.0 2 4.95 4.95 WOVEN FROST CUSHION COVER 2.0 2 4.95 4.95 [30696 rows x 4 columns]
错误信息
KeyError: "None of [Index(['Australia', 'DOLLY GIRL BEAKER'], dtype='object')] are in the [index]"
问题原因与解决方法
- 核心问题:你执行
groupby后没有把结果保存到变量,而是直接在原DataFrameretail上调用.loc。原DataFrame的索引不是多级索引,根本不存在('Australia','DOLLY GIRL BEAKER')这个索引值,所以报错。 - 解决方法:
- 将groupby的结果赋值给新变量:
retail_grouped = retail.groupby(['Country','Description'])['Quantity','Price'].agg([np.mean,max]) - 用
.loc访问这个新变量:retail_grouped.loc[('Australia','DOLLY GIRL BEAKER'),('Quantity','mean')]
- 将groupby的结果赋值给新变量:
- 替代方案:如果不想创建新变量,可以直接链式调用,确保
.loc作用在groupby的结果上:retail.groupby(['Country','Description'])['Quantity','Price'].agg([np.mean,max]).loc[('Australia','DOLLY GIRL BEAKER'),('Quantity','mean')]
内容的提问来源于stack exchange,提问作者Ehab Helmy
相关产品推荐
相关产品推荐

