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

请教Pandas中reset_index()的level与col_level参数用法

理解Pandas中reset_index()的level和col_level参数

一、level参数:控制哪级索引转成列

当你的DataFrame用了**多级索引(MultiIndex)**时,reset_index()默认会把所有行索引都转成普通列。但如果你只想转其中某一级,就用level参数指定目标层级——可以用层级的名称,也可以用层级的位置序号(从0开始)。

举个实际例子:

import pandas as pd

# 创建一个带两级行索引的DataFrame
data = {'score': [85, 92, 78, 90]}
row_index = pd.MultiIndex.from_tuples(
    [('高一', '一班'), ('高一', '二班'), ('高二', '一班'), ('高二', '二班')],
    names=['年级', '班级']
)
df = pd.DataFrame(data, index=row_index)

此时df的结构是:

score
年级 班级        
高一 一班       85
    二班       92
高二 一班       78
    二班       90
  • 只转第一级索引(年级):df.reset_index(level='年级')
    结果:
年级  score
班级            
一班  高一     85
二班  高一     92
一班  高二     78
二班  高二     90

这里只有年级被转成了列,班级仍保留为行索引。

  • 只转第二级索引(班级):df.reset_index(level=1)
    结果:
班级  score
年级            
高一  一班     85
高一  二班     92
高二  一班     78
高二  二班     90
  • 同时转多级索引:df.reset_index(level=['年级', '班级']),结果会把两级索引都转成列,行索引变成默认的0、1、2、3序列。

二、col_level参数:控制新列放在哪级列索引下

这个参数仅在DataFrame有**多级列索引(MultiIndex)**时生效。当你重置行索引后,新生成的索引列(比如原来的行索引)会被加入列结构中,col_level用来指定这个新列要放在哪一级列索引下面。

举个例子:

import pandas as pd

# 创建一个带两级列索引的DataFrame
data = [[100, 95], [90, 88]]
col_index = pd.MultiIndex.from_tuples(
    [('期中', '语文'), ('期中', '数学')],
    names=['考试阶段', '科目']
)
df = pd.DataFrame(data, columns=col_index)
# 给df加行索引
df.index = ['学生A', '学生B']

此时df的结构是:

考试阶段   期中    
科目     语文  数学
学生A     100  95
学生B      90  88

执行df.reset_index(col_level=0):
结果:

考试阶段 index  期中    
科目         语文  数学
0      学生A    100  95
1      学生B     90  88

新生成的index列被放在了列索引的第0级(考试阶段),和期中同级。

如果执行df.reset_index(col_level=1):
结果:

考试阶段   期中    
科目     index 语文  数学
0        学生A  100  95
1        学生B   90  88

此时index列被放在了列索引的第1级(科目),和语文、数学同级。

简单说,col_level就是给新生成的索引列在多级列索引里找个“位置”。


内容的提问来源于stack exchange,提问作者Anubhav Srivastava

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 22:42:34