多层索引

112 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第27天,点击查看活动详情

多层索引

多层索引的创建

 import pandas as pd
 s = pd.Series([1,2,3,4,5,6],index=[['张三','张三','李四','李四','王五','王五'],
                                    ['期中','期末','期中','期末','期中','期末']])
 # 张三一列是数据的第一层索引,期中一列是数据的第二层索引,而第二层索引值是和数据一一对应的。
 print(s)

多层索引展示:

image.png

张三那一列是数据的第一层索引,期中的那一列数据是第二层索引,第二层索引值是和数据一一对应的。

创建多层索引表格:

用 numpy 中的随机模块创建出随机的成绩。data = np.random.randint(0,100,size=(6,3))

  • 使用 numpy 中的随机模块中的生成随机整数方法randint,里面的参数 size() 是指定生成6行3列的数据,每个数字范围在0~100之间

那么有随机生成浮点数的方法吗?去博客查了一下,numpy 没有专门的函数做这个浮点数随机生成,所以可以自己自定义一个函数:

 import numpy as np
 def randfloat(num,l,h):
     if l >h:
         return None
     else:
         a = h - l 
         b = h - a
         out = (np.random.rand(num)*a+b).tolist()
         out = np.array(out)
         return out
 ​
     
 data = randfloat(num = 200,l=3,h=6)
 data

image.png

创建多层索引

方法一:

 import pandas as pd
 import numpy as np
 ​
 data = np.random.randint(0,100,size = (6,3))
 df = pd.DataFrame(data,index=[['朱一龙','朱一龙','黄宗泽','黄宗泽','王嘉尔','王嘉尔'],
                               ['电影','综艺','电影','综艺','电影','综艺']],
                  columns=['得分1','得分2','得分3'])
 df

image.png

方法二:

使用 pandas 的pd.MultiIndex.from_product()

pd.MultiIndex.from_product()构建索引的方式好理解一点

首先,确定每一层索引的值什么,然后以列表的形势传给from_product()方法即可

 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=['形体','声乐','美术'])
 df

image.png

注意:[names,exam]列表中的位置不同,产生的索引也会不同。

 data = np.random.randint(0,100,size=(6,3))
 names = ['张三','李四','王五']
 exam = ['期中','期末']
 index = pd.MultiIndex.from_product([names,exam]) # 确定每一层索引的值,以列表的形势传给from_product()方法。
 # 括号中列表的位置会对最终的索引产生影响。第一个列表中元素将是最外层索引。
 df = pd.DataFrame(data,index=index,columns=['Java','Web','Python'])
 df

image.png

规律:

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

  • 列表中元素值得对应关系如图:

    • 无标题-2022-07-27-1119.excalidraw.png