Pandas对groupby().first()结果执行apply时出现KeyError如何处理
报错核心原因
你调用groupby(['RB','test'])时,默认会将分组键RB、test转为结果DataFrame的多级行索引,不会保留为普通列。输出df_u.columns可以看到只有ValOption、contrat两个列,所以在apply里通过row['RB']取列时,自然找不到对应字段,抛出KeyError。
解决方案(按优先级推荐)
- 方案1:分组时指定
as_index=False,让分组键保留为普通列(最简便,无需修改原有自定义函数)
代码修改为:
后续原有apply代码可以直接正常运行。df_u=df.groupby(['RB','test'], as_index=False).first() - 方案2:分组后手动调用
reset_index()将索引转回普通列
代码修改为:
效果和方案1完全一致,适合已经完成分组操作不想重算的场景。df_u=df.groupby(['RB','test']).first().reset_index() - 方案3:保留多级索引的前提下,修改自定义函数从行索引取值
自定义函数修改为:
该方案可读性差,索引顺序调整后容易出错,非必要不推荐。def func(row): v1=row.name[0]*3 # row.name对应多级索引元组,第0位是RB的值 v2=row.name[1]-1 # 第1位是test的值 return v1+v2
内容的提问来源于stack exchange,提问作者William
相关产品推荐
相关产品推荐

