如何在Pandas链式代码中重命名分组后的索引层级名称?
问题描述
现有名为bmi的DataFrame,需按Age值的十位数(即年龄段)分组汇总。执行以下代码后:
bmi.groupby(by=bmi.Age//10).describe().stack()
生成结果的索引名称为Age,希望将其改为Decade,并寻求简洁的链式调用实现方式,替代目前冗余的写法:
bmi.groupby(by=bmi.Age//10).describe().reset_index(level='Age', names='Decades').set_index('Decades').stack()
解决方案
Pandas内置的rename_axis()方法正是用来重命名索引(或列)名称的,完美支持链式调用,直接替代你想要的which_func():
方法1:字典映射修改指定索引层级
bmi.groupby(by=bmi.Age//10).describe().rename_axis({'Age': 'Decade'}).stack()
方法2:指定层级和新名称(更直观)
因为仅需修改单个索引层级,可直接传入层级名和新名称:
bmi.groupby(by=bmi.Age//10).describe().rename_axis('Decade', level='Age').stack()
方法3:提前在分组阶段指定索引名称
还可以在groupby时就直接定义好索引名称,避免后续修改步骤:
# 方式A:通过groupby参数指定 bmi.groupby(by=bmi.Age//10, group_keys=True).describe().rename_axis('Decade').stack() # 方式B:先构造年龄段列再分组(可读性更强) bmi.assign(Decade=bmi.Age//10).groupby('Decade').describe().stack()
内容的提问来源于stack exchange,提问作者farhanhubble
相关产品推荐
相关产品推荐

