You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas分组后DataFrame索引重命名仅前3行生效的解决方法求助

问题描述

我通过以下代码对现有表格进行分组聚合:

df.groupby('bin_fare')['fare'].agg(['count', 'sum', 'mean'])

得到的结果中,索引名为bin_fare,具体数据如下:

bin_farecountsummean
14913717.14137.570553
24749000.307818.987991
325914565.000314565.0003
48416268.037516268.0375

我尝试用以下代码重命名索引:

fare_rate_names = ['cheapest','avarage','above average','expensive']
df.groupby('bin_fare')['fare'].agg(['count','sum','mean']).rename(index=pd.Series(data=fare_rate_names))

但仅前3行索引被重命名,第4行仍为原索引值4,如何在不修改fare_rate_names开头元素的前提下解决该问题?

解决方法

出现该问题的核心原因是:用pd.Series传递新索引时,Series默认索引是从0开始的整数,而原分组结果的索引是1、2、3、4,两者无法完全匹配——前3个新值对应Series的0、1、2索引,刚好能对应原结果的1、2、3索引,但原结果的4号索引找不到Series中对应的值,因此保留了原索引。

以下两种方法都无需修改fare_rate_names的内容,可彻底解决问题:

方法1:用字典精准映射原索引与新名称

直接创建原索引值到新名称的映射字典,确保每个原索引都能匹配到对应的新名称:

fare_rate_names = ['cheapest','avarage','above average','expensive']
# 先获取分组聚合结果
result = df.groupby('bin_fare')['fare'].agg(['count','sum','mean'])
# 用字典映射完成索引重命名
result.rename(index=dict(zip(result.index, fare_rate_names)), inplace=True)

方法2:直接替换索引属性

由于新名称的顺序和原索引的顺序完全对应,直接赋值给结果的index属性是最简洁的方式:

fare_rate_names = ['cheapest','avarage','above average','expensive']
result = df.groupby('bin_fare')['fare'].agg(['count','sum','mean'])
result.index = fare_rate_names

内容的提问来源于stack exchange,提问作者Alexey Konev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 14:24:18