拯救pandas计划(3)——多级索引取值

点击上方“Python爬虫与数据挖掘”,进行关注

回复“书籍”即可获赠Python从入门到进阶共10本电子书

繁华事散逐香尘,流水无情草自春。

拯救pandas计划(3)——多级索引取值

  • 数据需求

  • 需求拆解

  • 需求处理

    • 方法一:

    • 方法二:

  • 总结

最近发现周围的很多小伙伴们都不太乐意使用pandas,转而投向其他的数据操作库,身为一个数据工作者,基本上是张口pandas,闭口pandas了,故而写下此系列以让更多的小伙伴们爱上pandas。

系列文章说明:

系列名(系列文章序号)——此次系列文章具体解决的需求

平台:

  • windows 10

  • python 3.8

  • pandas 1.2.4

数据需求

给定一份多级索引数据,查找指定值。

b51bb3899ff7bfc094903cb3d5f669e6.png

需求拆解

数据提取在pandas中,或者说在python中就是索引式提取,在单层索引中采用·.lo.iloc方法已经非常常见了,然而在索引层次多了之后却有点不知所措,也只需要将各个索引看成整体进行提取就行。

需求处理

方法一:

这里先给出一个比较笨拙的方法,先将索引进行重置为列数据,通过列取得bool条件再进行提取

datac.reset_index(inplace=True)
datac[(datac['School'] == 'S_2') & (datac['Class'] == 'C_3')]

122c62dd84b4cdd52df1d62ff28aca7e.png可以看到通过该类方法可以成功取到对应值

当然也可以采用.query方法进行条件筛选

datac.reset_index(inplace=True)
datac.query("School == 'S_1' and Class == 'C_3'")
42f6c169c509a8dc046d9833c9f846fa.png

方法二:

既然为多级索引,pandas也会有对应的取值方式,既可以用链式调用的方式,也可以通过元组进行提取,首先看看多级索引的输出值:
a5c37b0434544d34f743e8ce133140b0.png是一个MultiIndex类型数据,其元素都是元组,即也能通过元组的方式进行索引调取

这两种都一个共同的特点,从左到右,要先外层再内层,否则会报KeyError错误

# 链式调用
datac.loc['S_1'].loc['C_1']
c1ae18fffe221166a8da4611d44bac26.png
# 元组作为索引调用
datac.loc[('S_3', 'C_1'), :]
d4a617bf6115d75c61760bb8476447e9.png

tips:

  1. 多层索引,即列名上方有层次结构也可以按这种方式进行提取。

  2. 想越过外层索引提取内层索引需要交换索引顺序才能顺利提取。

    # swaplevel 交换索引层级
    datac.swaplevel(axis=0).loc[('C_1')]  # axis=0: index
    70bc77b7b783963fd596d3be71d71904.png

总结

功夫再高,也怕菜刀。本例使用方法比较常规,旨在巩固基础知识,当下次遇到能够想起可以直接索引取值而不用将索引重置为列值,以高效完成数据提取任务。

在茫茫人海中,我与你仅有一瞥,却通过你的眼睛里看到汪洋大海,我相信心灵的碰撞能带来更长久的欢快。


于二零二二年元月十三日作

0da156d27d1a5ae24ffac43f326b1518.png

小伙伴们,快快用实践一下吧!如果在学习过程中,有遇到任何问题,欢迎加我好友,我拉你进Python学习交流群共同探讨学习。

d73ef975c4d4781183c19d9be4b5e3fb.png

------------------- End -------------------

往期精彩文章推荐:

81f1b328895d066fd2c15e014363740d.png

欢迎大家点赞,留言,转发,转载,感谢大家的相伴与支持

想加入Python学习群请在后台回复【入群

万水千山总是情,点个【在看】行不行

/今日留言主题/

随便说一两句吧~~

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值