数据分析索引总结(中)Pandas多级索引

本文详细介绍了如何创建Pandas的多级索引,包括从元组列表、利用zip和数组创建。文章还探讨了多层索引的切片,提供了多种获取特定索引值的方法,如交换索引层级、使用get_level_values函数、query方法和pd.IndexSlice。同时,文章解释了使用slice对象进行多层索引操作的灵活性,并讨论了索引层的交换,包括swaplevel和reorder_levels方法。最后,作者提醒读者在使用切片时要注意索引是否排序,以避免性能警告。

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

 Datawhale干货 

作者:闫钟峰,Datawhale优秀学习者

寄语:本文介绍了创建多级索引、多层索引切片、多层索引中的slice对象、索引层的交换等内容。

创建多级索引

1. 通过from_tuple或from_arrays
① 直接从元组列表创建多重索引
tuples = [('A','a'),('A','b'),('B','a'),('B','b')]
mul_index = pd.MultiIndex.from_tuples(tuples, names=('Upper', 'Lower'))
pd.DataFrame({'Score':['perfect','good','fair','bad']},index=mul_index
② 利用zip创建元组
多重索引本质上的结构是一个由元组构成的list
L1 = list('AABB')
L2 = list('abab')
tuples = list(zip(L1,L2))
mul_index = pd.MultiIndex.from_tuples(tuples, names=('Upper', 'Lower'))
pd.DataFrame({'Score':['perfect','good','fair','bad']},index=mul_index)
注意,如果用于创建多重索引的由tuple组成的list本身是未排序的, 那么创建的df也未排序。
pd.DataFrame({'Score':['perfect','good','fair','bad']},index=pd.MultiIndex.from_tuples(list(zip(L2,L1)), names=('Lower', 'Upper')))
为了便于使用, 可以使用sort_index()进行排序
pd.DataFrame({'Score':['perfect','good','fair','bad']},index=pd.MultiIndex.from_tuples(list(zip(L2,L1)), names=('Lower', 'Upper'))).sort_index()
③ 通过Array(或列表构成的列表)创建
内层的list会自动转成元组
arrays = [['A','a'],['A','b'],['B','a'],['B','b']]
mul_index = pd.MultiIndex.from_tuples(arrays, names=('Upper', 'Lower'))
pd.DataFrame({'Score':['perfect','good','fair','bad']},index=mul_index)
如果创建之初未排序,创建的多重索引也是未排序的
arrays = [['A','a'],['B','a'],['A','b'],['B','b']]
mul_index = pd.MultiIndex.from_tuples(arrays, names=('Upper', 'Lower'))
pd.DataFrame({'Score':['perfect','good','fair','bad']},index=mul_index)
尽管多重索引内部是个由tuple组成的list, 但由于顺序不同, 并不能视为相等的多重索引。但直接比较两个顺序不同的多重索引, 返回值是一个布尔值array, 并不如预期的那样。
sorted_multi_index=pd.DataFrame({'Score':['perfect','good','fair','bad']},index=mul_index).sort_index().index
sorted_multi_index==mul_index
如果是两个list, 改变顺序后与原始list相比较, 返回值只有一个 False。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值