如何将Pandas多重索引DataFrame转换为单索引并新增索引衍生列
高效转换Pandas多重索引DataFrame的方法
如果你想把多重索引(MultiIndex)中的某一层级转为普通列,Pandas原生提供了比for循环高效得多的原生方法,完全不需要手动写循环:
方法1:使用reset_index()
这是最直接的方案,你可以通过level参数指定要转换的索引层级,未指定的索引会继续保留为行索引;如果不传入level,则所有索引层级都会转为普通列。
示例代码:
假设你的多重索引包含['类别', '日期']两层,现在要把日期这一层转为列:
# 假设原DataFrame名为df df_converted = df.reset_index(level='日期')
如果需要一次性转换多个索引层级,把层级名或序号放到列表中即可:
# 同时转换索引'类别'和'日期' df_converted = df.reset_index(level=['类别', '日期'])
方法2:重置后重新指定索引
如果需要保留部分索引,也可以先把所有索引转为列,再用set_index()重新设置要保留的索引:
# 保留'类别'为索引,将'日期'转为列 df_converted = df.reset_index().set_index('类别')
方法3:stack()/unstack()(适用于复杂行列结构)
如果你的DataFrame同时存在行、列的多重索引,unstack()可以把行索引的某一层转到列维度,stack()则相反,但如果只是单纯将行索引转为普通列,reset_index()的可读性和效率更优。
额外提示:
reset_index()默认不会修改原DataFrame,若想直接在原数据上操作,添加inplace=True参数:
df.reset_index(level='日期', inplace=True)
- 除了索引名称,也可以用索引的序号指定层级,比如第一层索引序号为0,第二层为1,
level=1即可转换第二层索引。
内容的提问来源于stack exchange,提问作者Mika
相关产品推荐
相关产品推荐

