Pandas---Pandas的层级索引

这篇博客介绍了Pandas的层级索引概念,通过创建一个具有内外层索引的Series来展示其工作原理。层级索引允许通过外层和内层索引来便捷地获取数据,并且在分组操作和生成透视表时非常有用。此外,文章还讨论了如何使用.sortlevel()进行排序以及如何用.swaplevel()交换索引层。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

层级索引(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.339618
   1   -0.489586
   2   -0.849233
b  0    0.638045
   1    1.901217
   2   -2.009243
c  0    0.469703
   1   -0.560258
   2   -0.992182
d  0   -0.429164
   1    0.596181
   2    0.780883
dtype: float64

在这里插入图片描述

认识了层级索引,我们看看层级索引有什么用呢?
根据索引获取数据。因为现在有两层索引,当通过外层索引获取数据的时候,可以直接利用外层索引的标签来获取。

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

内外层的选取
常用于分组操作、透视表的生成等

# coding:utf-8
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)

# 外层选取
print(ser_obj['c'])

print("*"*100)

# 内层索引
print(ser_obj[:,2])
a  0   -0.355108
   1   -0.403158
   2   -0.208994
b  0   -1.278609
   1   -0.563352
   2    1.094893
c  0    0.552347
   1   -0.554993
   2    0.873725
d  0    0.275341
   1    0.201273
   2    0.613563
dtype: float64
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
0    0.552347
1   -0.554993
2    0.873725
dtype: float64
****************************************************************************************************
a   -0.208994
b    1.094893
c    0.873725
d    0.613563
dtype: float64

如果是层级索引,是否可以交换分层顺序?
.sortlevel(): .sortlevel( )先对外层索引进行排序,再对内层索引进行排序,默认是升序。
swaplevel():.swaplevel( )交换内层与外层索引。

# coding:utf-8
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)
print("*~"*100)
print(ser_obj.swaplevel())   # 交换内外层顺序
print("*"*100)
print(ser_obj.sortlevel())  # sortlevel先对外层索引进行排序,再对内层索引进行排序,默认是升序

代码运行结果:

a  0    0.634978
   1   -0.800664
  print(ser_obj.swaplevel().sortlevel())  # sortlevel先对外层索引进行排序,再对内层索引进行排序,默认是升序
   2   -0.241773
b  0    0.617015
   1   -0.289723
   2    0.071330
c  0   -0.649187
   1    0.559757
   2   -1.160737
d  0    0.095962
   1    1.154421
   2    0.835440
dtype: float64
*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~
0  a    0.634978
1  a   -0.800664
2  a   -0.241773
0  b    0.617015
1  b   -0.289723
2  b    0.071330
0  c   -0.649187
1  c    0.559757
2  c   -1.160737
0  d    0.095962
1  d    1.154421
2  d    0.835440
dtype: float64
****************************************************************************************************
0  a    0.634978
   b    0.617015
   c   -0.649187
   d    0.095962
1  a   -0.800664
   b   -0.289723
   c    0.559757
   d    1.154421
2  a   -0.241773
   b    0.071330
   c   -1.160737
   d    0.835440
dtype: float64
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值