• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    pandas多层索引的创建和取值以及排序的实现

    多层索引的创建

    普通-多个index创建

    Series多层索引的创建方法

    import pandas as pd
    s = pd.Series([1,2,3,4,5,6],index=[['张三','张三','李四','李四','王五','王五'],
                      ['期中','期末','期中','期末','期中','期末']])
    # print(s)
    s
    

    张三  期中    1
        期末    2
    李四  期中    3
        期末    4
    王五  期中    5
        期末    6
    dtype: int64

    利用 numpy中的随机数

    import numpy as np
    
    data = np.random.randint(0,100,size=(6,3))
    # np.random.randint(0,100,size=(6,3))是使用numpy中的随机模块random中,生成随机整数方法randint,
    # 里面的参数size是指定生成6行3列的数据,并且每个数字的范围在0到100之间
    
    data
    
    array([[44, 66, 67],
        [82, 52, 0],
        [34, 78, 23],
        [38, 4, 43],
        [60, 62, 40],
        [57, 9, 11]])

    Dataframe多层索引创建

    import pandas as pd
    import numpy as np
    
    data = np.random.randint(0,100,size=(6,3))
    df = pd.DataFrame(data,index=[['张三','张三','李四','李四','王五','王五'],
                   ['期中','期末','期中','期末','期中','期末']],
               columns=['Java','Web','Python'])
    
    df
    

    Java Web Python
    张三 期中 68 4 90
    期末 33 63 73
    李四 期中 30 13 68
    期末 14 18 48
    王五 期中 34 66 26
    期末 89 10 35

    简化创建-from_product()

    import pandas as pd
    import numpy as np
    
    data = np.random.randint(0,100,size=(6,3))
    names = ['张三','李四','王五']
    exam = ['期中','期末']
    index = pd.MultiIndex.from_product([names,exam])
    df = pd.DataFrame(data,index=index,columns=['Java','Web','Python'])
    # print(df)
    df
    

    Java Web Python
    张三 期中 51 78 47
    期末 39 53 36
    李四 期中 33 60 83
    期末 90 55 3
    王五 期中 37 45 66
    期末 6 82 71

    from_product()在这个里面的列表中位置不同, 产生的索引页会不同

    index = pd.MultiIndex.from_product([exam, names])
    df = pd.DataFrame(data,index=index,columns=['Java','Web','Python'])
    # print(df)
    df

    Java Web Python
    期中 张三 51 78 47
    李四 39 53 36
    王五 33 60 83
    期末 张三 90 55 3
    李四 37 45 66
    王五 6 82 71

    from_product([exam,names])会将列表中第一个元素作为最外层索引,依次类推

    多层索引的取值

    获取到我们想要的数据

    获取多层索引Series中的数据

    创建数据

    import pandas as pd
    s = pd.Series([1,2,3,4,5,6],index=[['张三','张三','李四','李四','王五','王五'],
                      ['期中','期末','期中','期末','期中','期末']])
    print(s)

    张三  期中    1
        期末    2
    李四  期中    3
        期末    4
    王五  期中    5
        期末    6
    dtype: int64

    可以直接使用[]的方式取最外面的一个层级 s[‘张三']

    s['李四']
    
    # 注意:[]取值方式,不可直接使用最外层以外的其他层级,例如:s['期末']
    
    

    期中    3
    期末    4
    dtype: int64

    使用['外索引', '内索引'], 获取某个数据

    注意:[‘张三',‘期末']他们的顺序不能变。剥洋葱原则,从外到内一层一层的剥。

    s['李四', '期中'] # 李四期中分值
    
    # 注意:['张三','期末']他们的顺序不能变。剥洋葱原则,从外到内一层一层的剥。
    
    

    3

    使用[]的切片,获取数据s[:,‘期中']

    s[:,'期中'] # 第一个值为全部的外索引

    张三    1
    李四    3
    王五    5
    dtype: int64

    使用 loc

    # loc 使用方式与 [] 的方式基本一样
    
    s.loc['张三']
    s.loc['张三','期中']
    s.loc[:,'期中']
    
    # iloc 的取值并不会受多层索引影响,只会根据数据的位置索引进行取值, 不推荐
    
    

    张三    1
    李四    3
    王五    5
    dtype: int64

    多层索引DataFrame的取值

    在对多层索引DataFrame的取值是,推荐使用 loc() 函数

    import pandas as pd
    import numpy as np
    #size参数是指定生成6行3列的数组
    data = np.random.randint(0,100,size=(6,3))
    names = ['张三','李四','王五']
    exam = ['期中','期末']
    index = pd.MultiIndex.from_product([names,exam])
    df = pd.DataFrame(data,index=index,columns=['Java','Web','Python'])
    df
    

    Java Web Python
    张三 期中 3 40 52
    期末 74 38 85
    李四 期中 7 28 16
    期末 9 25 0
    王五 期中 13 24 8
    期末 49 46 1

    三种方式都可以获取张三期中各科成绩

    # df.loc['张三','期中']
    # df.loc['张三'].loc['期中']
    # df.loc[('张三','期中')]
    

    注意:DataFrame中对行索引的时候和Series有一个同样的注意点,就是无法直接对二级索引直接进行索引,必须让二级索引变成一级索引后才能对其进行索引

    多层索引的排序

    创建数据

    import pandas as pd
    data = np.random.randint(0,100,size=(9,3))
    key1 = ['b','c','a']
    key2 = [2,1,3]
    index = pd.MultiIndex.from_product([key1,key2])
    df = pd.DataFrame(data,index=index,columns=['Java','Web','Python'])
    
    df 
    
    

    Java Web Python
    b 2 56 82 81
    1 84 16 55
    3 35 25 86
    c 2 76 1 76
    1 36 28 94
    3 79 70 97
    a 2 25 17 30
    1 38 38 78
    3 41 75 90

    排序

    df.sort_index()

    Java Web Python
    a 1 18 60 74
    2 66 87 27
    3 96 18 64
    b 1 72 58 52
    2 22 31 22
    3 31 12 83
    c 1 6 54 96
    2 9 47 18
    3 31 63 4

    # 当level=0时,ascending=False, 会根据第一层索引值进行降序排序
    df.sort_index(level=0,ascending=False)

    Java Web Python
    c 3 79 70 97
    2 76 1 76
    1 36 28 94
    b 3 35 25 86
    2 56 82 81
    1 84 16 55
    a 3 41 75 90
    2 25 17 30
    1 38 38 78

    # 当level=1时,会根据第二层索引值进行降序排序
    
    df.sort_index(level=1,ascending=False)
    
    # 数据会根据第二层索引值进行相应的降序排列,
    # 如果索引值相同时会根据其他层索引值排列
    

    Java Web Python
    c 3 79 70 97
    b 3 35 25 86
    a 3 41 75 90
    c 2 76 1 76
    b 2 56 82 81
    a 2 25 17 30
    c 1 36 28 94
    b 1 84 16 55
    a 1 38 38 78

    通过level设置排序的索引层级,其他层索引也会根据其排序规则进行排序

    到此这篇关于pandas多层索引的创建和取值以及排序的实现的文章就介绍到这了,更多相关pandas多层索引内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    您可能感兴趣的文章:
    • pandas组内排序,并在每个分组内按序打上序号的操作
    • pandas按照列的值排序(某一列或者多列)
    • pandas的排序和排名的具体使用
    • 使用Pandas对数据进行筛选和排序的实现
    • Pandas分组与排序的实现
    • Pandas之排序函数sort_values()的实现
    • pandas通过索引进行排序的示例
    • pandas groupby分组对象的组内排序解决方案
    上一篇:Python 并列和或者条件的使用说明
    下一篇:Python jieba 中文分词与词频统计的操作
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    pandas多层索引的创建和取值以及排序的实现 pandas,多层,索引,的,创,建和,