赞
踩
Python3 pandas.MultiIndex 概述
层次化索引(hierarchical indexing)在一个轴上拥有多个(两个以上)索引级别,使用户能以低维度形式处理高维度数据。
levels:每个等级上轴标签的唯一值
labels:以整数来表示每个level上标签的位置
sortorder:按照指定level上的标签名称的字典顺序进行排序(可选参数)
names:index level的名称
copy:布尔值,默认为False。是否拷贝元数据产生新的对象
verify_integrity:布尔值,默认为Ture。检查levels/labels是否持续有效
入门级demo学习
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Time : 2019-06-13 10:11
# @Author : LiYahui
# @Description : python multiindex demo
import pandas as pd
import numpy as np
data = pd.Series(np.random.randn(10),
index=[['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'd', 'd'],
[1, 2, 3, 1, 2, 3, 1, 2, 2, 3]])
print("----------print data---------------")
print(data)
'''
a 1 -0.902378
2 -1.512923
3 -1.082350
b 1 -0.900975
2 -1.723988
3 -0.791613
c 1 -1.631530
2 2.290227
d 2 0.530892
3 1.199453
dtype: float64
'''
print("----------print data.index-------------")
print(data.index)
'''
MultiIndex(levels=[['a', 'b', 'c', 'd'], [1, 2, 3]],
codes=[[0, 0, 0, 1, 1, 1, 2, 2, 3, 3], [0, 1, 2, 0, 1, 2, 0, 1, 1, 2]])
'''
print("----------print data.index.levels[0]----------------")
print(data.index.levels[0])
'''
Index(['a', 'b', 'c', 'd'], dtype='object')
'''
print("----------print data.index.levels[1]----------------")
print(data.index.levels[1])
'''
Int64Index([1, 2, 3], dtype='int64')
'''
总结分析如下:
level中的唯一标签值集合分别为[‘a’, ‘b’, ‘c’, ‘d’]和[1, 2, 3]。
data.index.levels[0]上的标签abcd对应的索引为0123。data.index.levels[1]上的标签123对应的索引为012。
外层level的label值[0, 0, 0, 1, 1, 1, 2, 2, 3, 3]表示对应的标签值分别出现几次:a和b为3次,c和d为2次
内层level的label值[0, 1, 2, 0, 1, 2, 0, 1, 1, 2]按个数与外层label相对应。例如:外层a出现3次,则内层label的前3个值与a相对应,这三个索引值为0,1,2,分别对应1,2,3。
MultiIndex创建的方式
第一种
我们在创建Series或DataFrame时,可以通过给index(columns)参数传递多维数组,进而构建多维索引。【数组中每个维度对应位置的元素,组成每个索引值】
多维索引的也可以设置名称(names属性),属性的值为一维数组,元素的个数需要与索引的层数相同(每层索引都需要具有一个名称)。
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Time : 2019-06-13 10:52
# @Author : LiYahui
# @Description : MultiIndex demo
import pandas as pd
import numpy as np
# 创建多层索引的第一种方式
# 创建Series对象,具有单层索引。
s1 = pd.Series([1, 2, 3], index=["a", "b", "c"])
print(s1)
'''
a 1
b 2
c 3
dtype: int64
'''
# 创建多层索引。多层索引需要一个二维的数组,每个元素(一维数组)来指定每个层级的索引。顺序
# 由高层(左边)到底层(右边)。
s2 = pd.Series([1, 2, 3, 4], index=[["a", "a", "b", "b"], ["c", "d", "e", "f"], ["m", "m", "k", "t"]])
print(s2)
'''
a c m 1
d m 2
b e k 3
f t 4
dtype: int64
'''
print("-------df--------")
df = pd.DataFrame(np.random.random(size=(4, 4)), index=[["上半年", "上半年&#
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。