• 技术文章 >Python技术 >Python基础教程

    Python中pandas的层级索引!

     Ly Ly2020-06-20 16:56:08转载2502

    1、认识层级索引

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

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    >>> 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 属性表示每个位置分别是什么标签,如下所示:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    >>> 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 索引对象:

    1

    2

    3

    4

    5

    6

    7

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

    其他常用方法见下图:

    p1.jpg

    3、提取值

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

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    >>> 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 则会降序排列,示例如下:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    >>> 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知识,请点击Python视频教程!!

    专题推荐:python
    上一篇:Python中pandas函数应用! 下一篇:Python之了解pandas!

    相关文章推荐

    • python中的pandas是什么• python如何导入pandas• Python中pandas函数应用!

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网