请教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
相关产品推荐
相关产品推荐

