pandas不显示index_pandas层级索引

本文介绍了pandas的层级索引操作,包括如何创建层级索引的Series,查看MultiIndex对象的levels和labels,以及如何通过外层和内层索引选取数据。还演示了swaplevel()和sort_index()方法,用于交换和排序分层索引。

层级索引(hierarchical indexing)

下面创建一个Series, 在输入索引Index时,输入了由两个子list组成的list,

第一个子list是外层索引,第二个list是内层索引。

示例代码:

import pandas as pd

import numpy as np

ser_obj = pd.Series(np.random.randn(12),index=[

['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c', 'd', 'd', 'd'],

[0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2]

])

print(ser_obj)

运行结果:

a 0 0.099174

1 -0.310414

2 -0.558047

b 0 1.742445

1 1.152924

2 -0.725332

c 0 -0.150638

1 0.251660

2 0.063387

d 0 1.080605

1 0.567547

2 -0.154148

dtype: float64

MultiIndex索引对象

打印这个Series的索引类型,显示是MultiIndex

直接将索引打印出来,可以看到有levels,和labels两个信息。levels表示两个层级中分别有哪些标签,labels是每个位置分别是什么标签。

示例代码:

print(type(ser_obj.index))

print(ser_obj.index)

运行结果:

MultiIndex(levels=[['a', 'b', 'c', 'd'], [0, 1, 2]],

labels=[[0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3], [0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2]])

选取子集

根据索引获取数据。因为现在有两层索引,当通过外层索引获取数据的时候,可以直接利用外层索引的标签来获取。

当要通过内层索引获取数据的时候,在list中传入两个元素,前者是表示要选取的外层索引,后者表示要选取的内层索引。

1. 外层选取:

ser_obj['outer_label']

示例代码:

# 外层选取

print(ser_obj['c'])

运行结果:

0 -1.362096

1 1.558091

2 -0.452313

dtype: float64

2. 内层选取:

ser_obj[:, 'inner_label']

示例代码:

# 内层选取

print(ser_obj[:, 2])

运行结果:

a 0.826662

b 0.015426

c -0.452313

d -0.051063

dtype: float64

常用于分组操作、透视表的生成等

交换分层顺序

1. swaplevel()

.swaplevel( )交换内层与外层索引。

示例代码:

print(ser_obj.swaplevel())

运行结果:

0 a 0.099174

1 a -0.310414

2 a -0.558047

0 b 1.742445

1 b 1.152924

2 b -0.725332

0 c -0.150638

1 c 0.251660

2 c 0.063387

0 d 1.080605

1 d 0.567547

2 d -0.154148

dtype: float64

交换并排序分层

sort_index()

.sort_index() 先对外层索引进行排序,再对内层索引进行排序,默认是升序。

示例代码:

# 交换并排序分层

print(ser_obj.swaplevel().sort_index())

运行结果:

0 a 0.099174

b 1.742445

c -0.150638

d 1.080605

1 a -0.310414

b 1.152924

c 0.251660

d 0.567547

2 a -0.558047

b -0.725332

c 0.063387

d -0.154148

dtype: float64

### Pandas 多级索引使用方法教程 #### 创建多级索引对象 Pandas 提供了 `MultiIndex` 类型来处理多级索引的问题[^1]。下面是一个简单的例子展示如何创建一个多级索引的对象: ```python import numpy as np import pandas as pd index = [('California', 2000), ('California', 2010), ('New York', 2000), ('New York', 2010), ('Texas', 2000), ('Texas', 2010)] populations = [33871648, 37253956, 18976457, 19378102, 20851820, 25145561] # 构建Series并设置其索引为上述定义的元组列表形式 pop = pd.Series(populations, index=pd.MultiIndex.from_tuples(index)) print(pop) ``` 这段代码会输出如下所示的结果,其中包含了两个级别的索引——州名和年份。 #### 切片查询操作 对于带有多个层次结构的数据集来说,可以利用这些额外的信息来进行更精确的选择。例如,要获取特定时间段内的记录,可以通过指定起始位置到结束位置之间的范围实现切片查询功能[^2]: ```python # 查询从(California, 2010)至(Texas, 2000)之间所有的条目 slice_result = pop[('California', 2010):('Texas', 2000)] print(slice_result) # 获取所有2010年的数据项 year_2010_data = pop[pd.IndexSlice[:, 2010]] print(year_2010_data) ``` 这里展示了两种同的方式来做筛选:一种是指定确切的位置区间;另一种则是通过 `pd.IndexSlice[]` 来选取某一层上的固定值作为条件。 #### 访问单层或多层标签 当需要单独访问某个级别中的唯一标识符时,可调用 `.get_level_values()` 方法,并传入相应的 level 参数值(即第几层),从而返回该层内全部唯一的标记集合[^3]: ```python df = pop.unstack() # 将 Series 转换为 DataFrame 形式以便更好地理解 get_level_values 的作用 state_labels = df.index.get_level_values(0).unique() years = df.columns.get_level_values(0).unique() print(f'State Labels:\n{state_labels}\n') print(f'Years:\n{years}') ``` 此部分代码先将原始序列转换成了表格视图,再分别提取出行方向上的一级分类以及列方向上的时间戳信息。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值