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

如何将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 02:55:55