数据分析工具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是内层索引。

 


  
  1. import pandas as pd
  2. import numpy as np
  3. ser_obj = pd.Series(np.random.randn(12),index=[
  4. ['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c', 'd', 'd', 'd'],
  5. [0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2]
  6. ])
  7. print(ser_obj)

运行结果:


  
  1. a 0 0.099174
  2. 1 -0.310414
  3. 2 -0.558047
  4. b 0 1.742445
  5. 1 1.152924
  6. 2 -0.725332
  7. c 0 -0.150638
  8. 1 0.251660
  9. 2 0.063387
  10. d 0 1.080605
  11. 1 0.567547
  12. 2 -0.154148
  13. dtype: float64

MultiIndex索引对象

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

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

 


  
  1. print(type(ser_obj.index))
  2. print(ser_obj.index)

运行结果:


  
  1. <class 'pandas.indexes.multi.MultiIndex'>
  2. MultiIndex(levels=[['a', 'b', 'c', 'd'], [0, 1, 2]],
  3. 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']

 


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

运行结果:


  
  1. 0 -1.362096
  2. 1 1.558091
  3. 2 -0.452313
  4. dtype: float64

2. 内层选取:

ser_obj[:, 'inner_label']

 


  
  1. # 内层选取
  2. print(ser_obj[:, 2])

运行结果:


  
  1. a 0.826662
  2. b 0.015426
  3. c -0.452313
  4. d -0.051063
  5. dtype: float64

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

交换分层顺序

1. swaplevel()

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

 

print(ser_obj.swaplevel())

 

运行结果:


  
  1. 0 a 0.099174
  2. 1 a -0.310414
  3. 2 a -0.558047
  4. 0 b 1.742445
  5. 1 b 1.152924
  6. 2 b -0.725332
  7. 0 c -0.150638
  8. 1 c 0.251660
  9. 2 c 0.063387
  10. 0 d 1.080605
  11. 1 d 0.567547
  12. 2 d -0.154148
  13. dtype: float64

交换并排序分层

sortlevel()

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

 


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

运行结果:


  
  1. 0 a 0.099174
  2. b 1.742445
  3. c -0.150638
  4. d 1.080605
  5. 1 a -0.310414
  6. b 1.152924
  7. c 0.251660
  8. d 0.567547
  9. 2 a -0.558047
  10. b -0.725332
  11. c 0.063387
  12. d -0.154148
  13. 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个月内不可修改。