最新公告
  • 欢迎您光临网站无忧模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • Python中pandas的层级索引!

    正文概述    2020-07-19   305

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


    下载网 » Python中pandas的层级索引!

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元