如何处理pandas DataFrame多重索引,重命名层级并删除指定层级?
操作方案
行索引处理(重命名+删除第三层+解决重复问题)
删除第三层后第二层索引重复属于正常现象:原数据中同一个District_ID+Month组合下原本就有多条记录,第三层是原本区分这些记录的默认行号,删掉后自然会出现重复的前两层索引,如果你需要每个District_ID+Month组合仅对应一行,后续按需做聚合即可。
方法1:先命名层级再删除多余层级
# 先给三层索引分别设置名称,第三层临时命名为待删除的占位名 DF.index.names = ['District_ID', 'Month', 'drop_level'] # 删除第三层索引 DF = DF.reset_index(level='drop_level', drop=True)
方法2:删除层级后再重命名
# 先删除第三层索引 DF.index = DF.index.droplevel(2) # 重命名剩下的两层行索引 DF.index.names = ['District_ID', 'Month']
重复索引处理(按需选择)
如果需要合并同一District_ID+Month下的重复行,可根据业务需求选择聚合逻辑,示例为取数值列均值:
DF = DF.groupby(level=['District_ID', 'Month']).mean(numeric_only=True)
列索引重命名
分两种常用场景:
- 全量替换列名:列名列表长度需要和现有列数完全一致
# 示例:替换所有列名为自定义列表 DF.columns = ['自定义列名1', '自定义列名2', '自定义列名3']
- 替换指定列名:无需修改的列不需要传入
# 示例:仅将原列名old_col1、old_col2替换为新名称 DF = DF.rename(columns={ 'old_col1': 'new_col1', 'old_col2': 'new_col2' })
内容的提问来源于stack exchange,提问作者Lambda
相关产品推荐
相关产品推荐

