python中multiindex如何索引_Python--MultiIndex多层次索引学习

本文深入介绍了Python pandas库中的MultiIndex层次化索引概念,包括创建、操作和理解MultiIndex的方法。通过实例演示了如何创建、查看和操纵MultiIndex,展示了层次化索引在数据处理中的优势。文章最后讨论了如何通过swaplevel、sort_index、stack和unstack等方法进行索引的交换、排序和堆叠操作。
摘要由CSDN通过智能技术生成

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=[["上半年", "上半年&#

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值