Pandas如何根据MultiIndex其他层级值重命名指定索引层级
Pandas MultiIndex列按度量类型修改单位层级值实现方法
直接通过重建列多层索引的方式实现即可,.replace方法作用于DataFrame单元格值,无法修改索引层级内容。
实现代码
import pandas as pd # 构造示例DataFrame columns = pd.MultiIndex.from_product((("Length", "Weight"), ("Max", "Min"), ("asd",)), names=("Measure", "Info", "Unit")) df = pd.DataFrame(0., columns=columns, index=range(2)) # 度量-单位映射字典 measure_to_unit = {"Length": "m", "Weight": "kg"} # 遍历原列索引元组,替换Unit层级值后生成新的MultiIndex new_cols = pd.MultiIndex.from_tuples( [(measure, info, measure_to_unit[measure]) for measure, info, _ in df.columns], names=df.columns.names ) # 替换原DataFrame的列索引 df.columns = new_cols
运行结果
执行后打印df即可得到预期输出:
Measure Length Weight Info Max Min Max Min Unit m m kg kg 0 0.0 0.0 0.0 0.0 1 0.0 0.0 0.0 0.0
说明
- 该方法是MultiIndex修改的通用方案:只要需要按某一层级的取值修改其他层级的内容,都可以通过遍历原索引元组、替换目标值、重建索引的方式实现,不会出现索引错位问题。
- 不要尝试直接修改索引对象的内部属性,Pandas的Index对象是不可变类型,直接修改内部值会触发不可预期的错误。
内容的提问来源于stack exchange,提问作者edd313
相关产品推荐
相关产品推荐

