Pandas之MultiIndex对象的示例详解


Posted in Python onJune 25, 2019

约定

import pandas as pd
from pandas import DataFrame
import numpy as np

MultiIndex

MultiIndex表示多级索引,它是从Index继承过来的,其中多级标签用元组对象来表示。

一、创建MultiIndex对象

创建方式一:元组列表

m_index1=pd.Index([("A","x1"),("A","x2"),("B","y1"),("B","y2"),("B","y3")],name=["class1","class2"])
m_index1

代码结果:

MultiIndex(levels=[['A', 'B'], ['x1', 'x2', 'y1', 'y2', 'y3']],
      labels=[[0, 0, 1, 1, 1], [0, 1, 2, 3, 4]],
      names=['class1', 'class2'])
df1=DataFrame(np.random.randint(1,10,(5,3)),index=m_index1)
df1

代码结果:

0 1 2
class1 class2
A x1 7 4 8
x2 4 5 2
B y1 6 9 7
y2 2 1 6
y3 6 8 6

创建方式二:特定结构

例如**from_arrays()

class1=["A","A","B","B"]
class2=["x1","x2","y1","y2"]
m_index2=pd.MultiIndex.from_arrays([class1,class2],names=["class1","class2"])
m_index2

代码结果:

MultiIndex(levels=[['A', 'B'], ['x1', 'x2', 'y1', 'y2']],
      labels=[[0, 0, 1, 1], [0, 1, 2, 3]],
      names=['class1', 'class2'])
df2=DataFrame(np.random.randint(1,10,(4,3)),index=m_index2)
df2

代码结果:

0 1 2
class1 class2
A x1 2 4 5
x2 3 5 9
B y1 7 1 2
y2 3 1 8

创建方式三:笛卡尔积

from_product()从多个集合的笛卡尔积创建MultiIndex对象。

m_index3=pd.MultiIndex.from_product([["A","B"],['x1','y1']],names=["class1","class2"])
m_index3

代码结果:

MultiIndex(levels=[['A', 'B'], ['x1', 'y1']],
      labels=[[0, 0, 1, 1], [0, 1, 0, 1]],
      names=['class1', 'class2'])
df3=DataFrame(np.random.randint(1,10,(2,4)),columns=m_index3)
df3

代码结果:

class1 A B
class2 x1 y1 x1 y1
0 2 9 1 8
1 5 2 5 2

二、MultiIndex对象属性

df1

代码结果:

0 1 2
class1 class2
A x1 7 4 8
x2 4 5 2
B y1 6 9 7
y2 2 1 6
y3 6 8 6
m_index4=df1.index
print(in1[0])

代码结果:

('A', 'x1')

调用.get_loc()和.get_indexer()获取标签的下标:

print(m_index4.get_loc(("A","x2")))
print(m_index4.get_indexer([("A","x2"),("B","y1"),"nothing"]))

代码结果:

1
[ 1  2 -1]

MultiIndex对象使用多个Index对象保存索引中每一级的标签:

print(m_index4.levels[0])
print(m_index4.levels[1])

代码结果:

Index(['A', 'B'], dtype='object', name='class1')
Index(['x1', 'x2', 'y1', 'y2', 'y3'], dtype='object', name='class2')

MultiIndex对象还有属性labels保存标签的下标:

print(m_index4.labels[0])
print(m_index4.labels[1])

代码结果:

FrozenNDArray([0, 0, 1, 1, 1], dtype='int8')
FrozenNDArray([0, 1, 2, 3, 4], dtype='int8')

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python使用迭代器捕获Generator返回值的方法
Apr 05 Python
Ubuntu16.04/树莓派Python3+opencv配置教程(分享)
Apr 02 Python
python之消除前缀重命名的方法
Oct 21 Python
Python使用修饰器进行异常日志记录操作示例
Mar 19 Python
如何不用安装python就能在.NET里调用Python库
Jul 12 Python
Django1.11自带分页器paginator的使用方法
Oct 31 Python
基于python实现从尾到头打印链表
Nov 02 Python
Python3加密解密库Crypto的RSA加解密和签名/验签实现方法实例
Feb 11 Python
tensorflow pb to tflite 精度下降详解
May 25 Python
python使用多线程+socket实现端口扫描
May 28 Python
最新Python idle下载、安装与使用教程图文详解
Nov 28 Python
基于Python实现股票收益率分析
Apr 02 Python
Python+threading模块对单个接口进行并发测试
Jun 25 #Python
python简单鼠标自动点击某区域的实例
Jun 25 #Python
详解pandas删除缺失数据(pd.dropna()方法)
Jun 25 #Python
python命令行参数用法实例分析
Jun 25 #Python
PyQt5重写QComboBox的鼠标点击事件方法
Jun 25 #Python
bluepy 一款python封装的BLE利器简单介绍
Jun 25 #Python
PyQt5下拉式复选框QComboCheckBox的实例
Jun 25 #Python
You might like
php curl常见错误:SSL错误、bool(false)
2011/12/28 PHP
浅析ThinkPHP的模板输出功能
2014/07/01 PHP
yii插入数据库防并发的简单代码
2017/05/27 PHP
用Laravel Sms实现laravel短信验证码的发送的实现
2018/11/29 PHP
在JavaScript中通过URL传递汉字的方法
2007/04/09 Javascript
JavaScript入门教程 Cookies
2009/01/31 Javascript
JQuery下关于$.Ready()的分析
2009/12/13 Javascript
拖动布局之保存布局页面cookies篇
2010/10/29 Javascript
javascipt基础内容--需要注意的细节
2013/04/10 Javascript
理解Javascript闭包
2013/11/01 Javascript
js+csss实现的一个带复选框的下拉框
2014/09/29 Javascript
jQuery修改class属性和CSS样式整理
2015/01/30 Javascript
jQuery实现简单倒计时功能的方法
2016/07/04 Javascript
详解使用nodeJs安装Vue-cli
2017/05/17 NodeJs
js排序与重组的实例讲解
2017/08/28 Javascript
VSCode配置react开发环境的步骤
2017/12/27 Javascript
详解基于mpvue的小程序markdown适配解决方案
2018/05/08 Javascript
NodeJs生成sitemap站点地图的方法示例
2019/06/11 NodeJs
jsonp格式前端发送和后台接受写法的代码详解
2019/11/07 Javascript
浅谈vue权限管理实现及流程
2020/04/23 Javascript
Openlayers学习之地图比例尺控件
2020/09/28 Javascript
Python按行读取文件的简单实现方法
2016/06/22 Python
Python中使用bidict模块双向字典结构的奇技淫巧
2016/07/12 Python
Python求出0~100以内的所有素数
2018/01/23 Python
python语言元素知识点详解
2019/05/15 Python
python tkinter窗口最大化的实现
2019/07/15 Python
python生成xml时规定dtd实例方法
2020/09/21 Python
Django-silk性能测试工具安装及使用解析
2020/11/28 Python
HTML5 Canvas 起步(2) - 路径
2009/05/12 HTML / CSS
AmazeUI 平滑滚动效果的示例代码
2020/08/20 HTML / CSS
我的职业生涯规划:打造自己的运动帝国
2014/09/18 职场文书
医院合作意向书范本
2015/05/08 职场文书
2015年监理个人工作总结
2015/05/23 职场文书
助学金申请书该怎么写?
2019/07/16 职场文书
python如何做代码性能分析
2021/04/26 Python
为什么MySQL8新特性会修改自增主键属性
2022/04/18 MySQL