数据分析工具Pandas(5):Pandas的层级索引

举报
DrugAI 发表于 2021/07/15 04:10:50 2021/07/15
【摘要】 数据分析工具Pandas(1):Pandas的数据结构 数据分析工具Pandas(2):Pandas的索引操作 数据分析工具Pandas(3):Pandas的对齐运算 数据分析工具Pandas(4):Pandas的函数应用 数据分析工具Pandas(5):Pandas的层级索引 层级索引(hierarchical indexing) 下面创建一个Serie...

数据分析工具Pandas(1):Pandas的数据结构

数据分析工具Pandas(2):Pandas的索引操作

数据分析工具Pandas(3):Pandas的对齐运算

数据分析工具Pandas(4):Pandas的函数应用

数据分析工具Pandas(5):Pandas的层级索引


层级索引(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

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

 


      print(type(ser_obj.index))
      print(ser_obj.index)
  
 

运行结果:


      <class 'pandas.indexes.multi.MultiIndex'>
      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
  
 

交换并排序分层

sortlevel()

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

 


      # 交换并排序分层
      print(ser_obj.swaplevel().sortlevel())
  
 

运行结果:


      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
  
 

 参考资料

 

文章来源: drugai.blog.csdn.net,作者:DrugAI,版权归原作者所有,如需转载,请联系作者。

原文链接:drugai.blog.csdn.net/article/details/104286278

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。