如何获取裁剪后MultiIndex DataFrame的第二层索引名称?
当然可以获取到第二层索引的具体值,完全不需要预先知晓!因为你用drop_level=False保留了原MultiIndex结构,df2的索引仍然是两层的,我们可以直接通过索引对象的方法提取第二层的内容:
方法1:提取第二层所有索引值(包含重复项,若存在)
使用get_level_values()方法,指定第二层的层级序号(第一层是level 0,第二层是level 1):
# 获取第二层的所有索引值 second_level_vals = df2.index.get_level_values(1) print(second_level_vals) # 输出类似:Int64Index([1, 2], dtype='int64', name='level_1')
方法2:提取第二层的唯一索引值
如果只需要去重后的索引值,加上unique()方法并转成列表更方便后续使用:
unique_second_level = df2.index.get_level_values(1).unique().tolist() print(unique_second_level) # 输出 [1, 2]
如何用这些值进行loc调用?
拿到索引值后,就可以直接代入loc语法,比如遍历所有第二层索引对应的行:
for val in unique_second_level: target_row = df2.loc[('Open', val), :] # 这里可以对目标行做处理,比如打印或计算 print(f"索引为('Open', {val})的行:\n{target_row}\n")
或者直接访问特定索引值对应的行:
# 访问第二层第一个索引值对应的行 first_target_row = df2.loc[('Open', unique_second_level[0]), :]
另外,你也可以通过df2.index.levels[1]直接获取第二层索引的唯一值集合,效果和unique()方法一致:
print(df2.index.levels[1]) # 输出 Int64Index([1, 2], dtype='int64')
这样不管第二层索引是什么值,都能动态获取到,不用提前硬编码啦!
内容的提问来源于stack exchange,提问作者Eypros
相关产品推荐
相关产品推荐

