温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Python中pandas的层级索引是什么

发布时间:2020-06-24 13:45:03 来源:亿速云 阅读:367 作者:清晨 栏目:编程语言

不懂Python中pandas的层级索引是什么?其实想解决这个问题也不难,下面让小编带着大家一起学习怎么去解决,希望大家阅读完这篇文章后大所收获。

1、认识层级索引

以下示例将创建一个 Series 对象, 索引 Index 由两个子 list 组成,第一个子 list 是外层索引,第二个 list 是内层索引:

>>> import pandas as pd >>> import numpy as np >>> 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]]) >>> obj a  0   -0.201536    1   -0.629058    2    0.766716 b  0   -1.255831    1   -0.483727    2   -0.018653 c  0    0.788787    1    1.010097    2   -0.187258 d  0    1.242363    1   -0.822011    2   -0.085682 dtype: float64

2、MultiIndex 索引对象

尝试打印上面示例中 Series 的索引类型,会得到一个 MultiIndex 对象,MultiIndex 对象的 levels 属性表示两个层级中分别有那些标签,codes 属性表示每个位置分别是什么标签,如下所示:

>>> import pandas as pd >>> import numpy as np >>> 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]]) >>> obj a  0    0.035946    1   -0.867215    2   -0.053355 b  0   -0.986616    1    0.026071    2   -0.048394 c  0    0.251274    1    0.217790    2    1.137674 d  0   -1.245178    1    1.234972    2   -0.035624 dtype: float64 >>>  >>> type(obj.index) <class 'pandas.core.indexes.multi.MultiIndex'> >>>  >>> obj.index MultiIndex([('a', 0),             ('a', 1),             ('a', 2),             ('b', 0),             ('b', 1),             ('b', 2),             ('c', 0),             ('c', 1),             ('c', 2),             ('d', 0),             ('d', 1),             ('d', 2)],            ) >>> obj.index.levels FrozenList([['a', 'b', 'c', 'd'], [0, 1, 2]]) >>> >>> obj.index.codes FrozenList([[0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3], [0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2]])

通常可以使用 from_arrays() 方法来将数组对象转换为 MultiIndex 索引对象:

>>> arrays = [[1, 1, 2, 2], ['red', 'blue', 'red', 'blue']] >>> pd.MultiIndex.from_arrays(arrays, names=('number', 'color')) MultiIndex([(1,  'red'),             (1, 'blue'),             (2,  'red'),             (2, 'blue')],            names=['number', 'color'])

其他常用方法见下图:

Python中pandas的层级索引是什么

3、提取值

对于这种有多层索引的对象,如果只传入一个参数,则会对外层索引进行提取,其中包含对应所有的内层索引,如果传入两个参数,则第一个参数表示外层索引,第二个参数表示内层索引,示例如下:

>>> import pandas as pd >>> import numpy as np >>> 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]]) >>> obj a  0    0.550202    1    0.328784    2    1.422690 b  0   -1.333477    1   -0.933809    2   -0.326541 c  0    0.663686    1    0.943393    2    0.273106 d  0    1.354037    1   -2.312847    2   -2.343777 dtype: float64 >>>  >>> obj['b'] 0   -1.333477 1   -0.933809 2   -0.326541 dtype: float64 >>> >>> obj['b', 1] -0.9338094811708413 >>>  >>> obj[:, 2] a    1.422690 b   -0.326541 c    0.273106 d   -2.343777 dtype: float64

4、交换分层与排序

MultiIndex 对象的 swaplevel() 方法可以交换外层与内层索引,sortlevel() 方法会先对外层索引进行排序,再对内层索引进行排序,默认是升序,如果设置 ascending 参数为 False 则会降序排列,示例如下:

>>> import pandas as pd >>> import numpy as np >>> 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]]) >>> obj a  0   -0.110215    1    0.193075    2   -1.101706 b  0   -1.325743    1    0.528418    2   -0.127081 c  0   -0.733822    1    1.665262    2    0.127073 d  0    1.262022    1   -1.170518    2    0.966334 dtype: float64 >>>  >>> obj.swaplevel() 0  a   -0.110215 1  a    0.193075 2  a   -1.101706 0  b   -1.325743 1  b    0.528418 2  b   -0.127081 0  c   -0.733822 1  c    1.665262 2  c    0.127073 0  d    1.262022 1  d   -1.170518 2  d    0.966334 dtype: float64 >>>  >>> obj.swaplevel().index.sortlevel() (MultiIndex([(0, 'a'),             (0, 'b'),             (0, 'c'),             (0, 'd'),             (1, 'a'),             (1, 'b'),             (1, 'c'),             (1, 'd'),             (2, 'a'),             (2, 'b'),             (2, 'c'),             (2, 'd')],            ), array([ 0,  3,  6,  9,  1,  4,  7, 10,  2,  5,  8, 11], dtype=int32))

感谢你能够认真阅读完这篇文章,希望小编分享Python中pandas的层级索引是什么内容对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,遇到问题就找亿速云,详细的解决方法等着你来学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI