MultiIndex
MultiIndex,即具有多个层次的索引,有些类似于根据索引进行分组的形式,通过多层次索引,我们就可以使用高层次的索引,来操作整个索引组的数据。
创建方式
第一种
我们在创建Series或DataFrame时,可以通过给index(columns)参数传递多维数组,进而构建多为索引。【数组中每个维度对应位置元素,组成每个索引值】多为索引的也可以设置名称(names属性),属性的值为一维数组,元素的个数需要与索引的层数相同(每层索引都需要具有一个名称)。
第二种
我们可以通过MultiIndex类的相关方法,预先创建一个MultiIndex对象,然后作为Sreies与DataFrame中的index(或columns)参数值,同时,可以通过names参数指定多层索引的名称。
- from_arrays:接受一个多为数组参数,高纬度只当高层索引,低纬度指定底层索引。
- from_tuples:接受一个元组列表,每个元组指定每个索引(高维索引,低维索引)。
- from_product:接受一个可迭代对象的列表,根据可迭代对象元素的笛卡尔积进行创建索引。
import numpy as np
import pandas as pd
# 第一种形式
# 在创建Sreies或DataFrame对象时,通过index参数指定二维的数组类型,其中每个元素(一维数组类型)来指定每个层次的索引内容(索引标签)
s = pd.Series([1,2,3,4], index=["a","b","c","d"])
s = pd.Series([1,2,3,4], index=["海淀区","海淀区","昌平区","昌平区"],["上半年","下半年","上半年","下半年"])
s = pd.Series([1,2,3,4], index=["a","a","b","b"],["c","d","c","d"],["e","e","f","g"])
df = pd.DataFrame(np.random.rand((4,4),index=[["上半年","上半年","下半年","下半年"],["第一季度","第二季度","第三季度","第四季度"]],columns=[["水果","水果","蔬菜","蔬菜"],["苹果","香蕉","白菜","萝卜"])
df.index, df.columns
# Series/DataFrame的索引对象可以具有名字,当索引时单层时,可以给index的name属性赋值。
s = pd.Series([1,2,3,4], index=["a","a","b","b"], name="Series的name")
s.index.name = "index的name"
# 当索引是多层式,可以给index的names属性赋值。(每层索引都需要具有一个名字)
s = pd.Series([1,2,3,4], index=[["a","a","b","b"],["c","c","d","d"]])
s.index.names = ["outer","inner"]
df = pd.DataFrame(np.random.rand((4,4),index=[["上半年","上半年","下半年","下半年"],["第一季度","第二季度","第三季度","第四季度"]],columns=[["水果","水果","蔬菜","蔬菜"],["苹果","香蕉","白菜","萝卜"])
df.index.names=["年","季度"]
df.columns.names=["分类","品牌"]
# 第二种创建多层索引
# 1.通过数组的方式创建,参数传递一个二维数组,每个元素(一维数组)指定相应的层次标签。(一个元素指定一个层次)
pd.MultiIndex.from_arrays([["上半年","上半年","下半年",</