导航
  • 报考
  • 备考
  • 政策

报考

备考

复习资料

政策

行业动态

pandas的层级索引是什么?这才是python必须会的内容

环球青藤·2020-06-23 13:39:15浏览112 收藏44

请输入下面的图形验证码

提交验证

预约成功

我知道了
摘要 对于这种有多层索引的对象,如果只传入一个参数,则会对外层索引进行提取,其中包含对应所有的内层索引,那么你知道pandas的层级索引是什么?这才是python必须会的内容,所以你知道pandas的层级索引是什么?这才是python必须会的内容。

1、pandas的层级索引是什么——认识层级索引

以下示例将创建一个 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、pandas的层级索引是什么——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)

>>>

>>> 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'])

3、pandas的层级索引是什么——提取值

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

>>> 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、pandas的层级索引是什么——交换分层与排序

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))

以上就是《pandas的层级索引是什么?这才是python必须会的内容》的全部内容,对于这种有多层索引的对象,如果只传入一个参数,则会对外层索引进行提取,其中包含对应所有的内层索引,如果你想知道更多的python的相关方法,可以点击下方资料下载链接

展开剩余
资料下载
历年真题
精选课程
老师直播

注册电脑版

版权所有©环球青藤All Rights Reserved