使用groupby与value_counts时触发KeyError: 'Yes'问题求助
解决方案:KeyError: 'Yes' 问题处理
问题原因
执行df.groupby('deliveryzipcode')['orderreturned'].value_counts()后,得到的是**多级索引(MultiIndex)**的Series,索引层级顺序为deliveryzipcode → orderreturned。直接用['Yes']访问时,Python会尝试在最外层索引(即邮编)中查找'Yes',显然不存在,因此抛出KeyError。
解决方法
方法1:使用.xs()提取指定层级的结果
.xs()方法可以直接跨层级提取指定索引值的结果,是处理多级索引最便捷的方式:
print(df.groupby('deliveryzipcode')['orderreturned'].value_counts().xs('Yes', level='orderreturned'))
执行后会输出每个邮编对应的退货(Yes)次数:
deliveryzipcode 75202 2 60660 1 Name: orderreturned, dtype: int64
方法2:重置索引后筛选列
将多级索引转换为普通列,再通过条件筛选获取目标数据:
# 先将统计结果转为DataFrame,新增count列存储计数 counts_df = df.groupby('deliveryzipcode')['orderreturned'].value_counts().reset_index(name='count') # 筛选orderreturned为Yes的行 print(counts_df[counts_df['orderreturned'] == 'Yes'])
输出结果:
deliveryzipcode orderreturned count 0 75202 Yes 2 2 60660 Yes 1
方法3:双重索引访问(适合单个邮编查询)
如果只需要查询某个特定邮编的退货次数,可以通过双重索引直接访问:
# 查询75202邮编的退货次数 print(df.groupby('deliveryzipcode')['orderreturned'].value_counts()['75202']['Yes'])
输出:2
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

