IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Pandas的分层索引Multilndex 2021-08-24 -> 正文阅读

[Python知识库]Pandas的分层索引Multilndex 2021-08-24


''' 为什么要学习分层索引Multilndex? ·分层索引:在一个轴向上拥有多个索引层级,可以表达更高维度数据的形式; ·可以更方便的进行数据筛选,如果有序则性能更好;

groupby等操作的结果,如果是多KEY,结果是分层索引,需要会使用 ·一般不需要自己创建分层索引(Multilndex有构造函数但一般不用) 演示数据:百度、阿里巴巴、爱奇艺、京东四家公司的10天股票数据 数据来自:英为财经 https://cn.investing.coml 本次演示提纲: 一、Series的分层索引|Multilndex 二、Series有多层索引怎样筛选数据? 三、DataFrame的多层索引Multilndex 四、DataFrame有多层索引怎样筛选数据? '''
import pandas as pd
stocks
fpath = "F:\\python387\\pandas\\data\\stock.xlsx"
stocks = pd.read_excel(fpath)
stocks
日期	公司	收盘	开盘	高	低	交易量	涨跌幅
0	2019-10-03	BIDU	104.32	102.35	104.73	101.15	2.24	0.02
1	2019-10-02	BIDU	102.62	100.85	103.24	99.50	2.69	0.01
2	2019-10-01	BIDU	102.00	102.80	103.26	101.00	1.78	-0.01
3	2019-10-03	BABA	169.48	166.65	170.18	165.00	10.39	0.02
4	2019-10-02	BABA	165.77	162.82	166.88	161.90	11.60	0.00
5	2019-10-01	BABA	165.15	168.01	168.23	163.64	14.19	-0.01
6	2019-10-03	IQ	16.06	15.71	16.38	15.32	10.08	0.02
7	2019-10-02	IQ	15.72	15.85	15.87	15.12	8.10	-0.01
8	2019-10-01	IQ	15.92	16.14	16.22	15.50	11.65	-0.01
9	2019-10-03	JD	28.80	28.11	28.97	27.82	8.77	0.03
10	2019-10-02	JD	28.06	28.00	28.22	27.53	9.53	0.00
11	2019-10-01	JD	28.19	28.22	28.57	27.97	10.64	0.00
stocks.shape
(12, 8)
stocks['公司'].unique()
array(['BIDU', 'BABA', 'IQ', 'JD'], dtype=object)
ks.index
stocks.index
RangeIndex(start=0, stop=12, step=1)
b
stocks.groupby('公司')['收盘'].mean()
公司
BABA    166.80
BIDU    102.98
IQ       15.90
JD       28.35
Name: 收盘, dtype: float64
一、Series的分层所有MultiIndex

ser  =stocks.groupby(['公司','日期'])['收盘'].mean()
ser
公司    日期        
BABA  2019-10-01    165.15
      2019-10-02    165.77
      2019-10-03    169.48
BIDU  2019-10-01    102.00
      2019-10-02    102.62
      2019-10-03    104.32
IQ    2019-10-01     15.92
      2019-10-02     15.72
      2019-10-03     16.06
JD    2019-10-01     28.19
      2019-10-02     28.06
      2019-10-03     28.80
Name: 收盘, dtype: float64
ser.index
ser.index
MultiIndex(levels=[['BABA', 'BIDU', 'IQ', 'JD'], ['2019-10-01', '2019-10-02', '2019-10-03']],
           labels=[[0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3], [0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2]],
           names=['公司', '日期'])
ser.unstack()
#unstack把二级索引变成列
日期	2019-10-01	2019-10-02	2019-10-03
公司			
BABA	165.15	165.77	169.48
BIDU	102.00	102.62	104.32
IQ	15.92	15.72	16.06
JD	28.19	28.06	28.80
ser
ser.reset_index()
公司	日期	收盘
0	BABA	2019-10-01	165.15
1	BABA	2019-10-02	165.77
2	BABA	2019-10-03	169.48
3	BIDU	2019-10-01	102.00
4	BIDU	2019-10-02	102.62
5	BIDU	2019-10-03	104.32
6	IQ	2019-10-01	15.92
7	IQ	2019-10-02	15.72
8	IQ	2019-10-03	16.06
9	JD	2019-10-01	28.19
10	JD	2019-10-02	28.06
11	JD	2019-10-03	28.80
二、Series 有多层索引MultiIndex

ser
ser
公司    日期        
BABA  2019-10-01    165.15
      2019-10-02    165.77
      2019-10-03    169.48
BIDU  2019-10-01    102.00
      2019-10-02    102.62
      2019-10-03    104.32
IQ    2019-10-01     15.92
      2019-10-02     15.72
      2019-10-03     16.06
JD    2019-10-01     28.19
      2019-10-02     28.06
      2019-10-03     28.80
Name: 收盘, dtype: float64
ser.loc['BIDU']
日期
2019-10-01    102.00
2019-10-02    102.62
2019-10-03    104.32
Name: 收盘, dtype: float64
#多层索引,可以用元组的形式筛选
ser.loc['BIDU','2019-10-02']
102.62
2019-10-02
ser.loc[:,'2019-10-02']
公司
BABA    165.77
BIDU    102.62
IQ       15.72
JD       28.06
Name: 收盘, dtype: float64
三、DataFrame的多层索引Multilndex

stocks.head()
日期	公司	收盘	开盘	高	低	交易量	涨跌幅
0	2019-10-03	BIDU	104.32	102.35	104.73	101.15	2.24	0.02
1	2019-10-02	BIDU	102.62	100.85	103.24	99.50	2.69	0.01
2	2019-10-01	BIDU	102.00	102.80	103.26	101.00	1.78	-0.01
3	2019-10-03	BABA	169.48	166.65	170.18	165.00	10.39	0.02
4	2019-10-02	BABA	165.77	162.82	166.88	161.90	11.60	0.00
,
stocks.set_index(['公司','日期'],inplace = True)
stocks
收盘	开盘	高	低	交易量	涨跌幅
公司	日期						
BIDU	2019-10-03	104.32	102.35	104.73	101.15	2.24	0.02
2019-10-02	102.62	100.85	103.24	99.50	2.69	0.01
2019-10-01	102.00	102.80	103.26	101.00	1.78	-0.01
BABA	2019-10-03	169.48	166.65	170.18	165.00	10.39	0.02
2019-10-02	165.77	162.82	166.88	161.90	11.60	0.00
2019-10-01	165.15	168.01	168.23	163.64	14.19	-0.01
IQ	2019-10-03	16.06	15.71	16.38	15.32	10.08	0.02
2019-10-02	15.72	15.85	15.87	15.12	8.10	-0.01
2019-10-01	15.92	16.14	16.22	15.50	11.65	-0.01
JD	2019-10-03	28.80	28.11	28.97	27.82	8.77	0.03
2019-10-02	28.06	28.00	28.22	27.53	9.53	0.00
2019-10-01	28.19	28.22	28.57	27.97	10.64	0.00
形式显示
stocks.index#以元组的形式显示
MultiIndex(levels=[['BABA', 'BIDU', 'IQ', 'JD'], ['2019-10-01', '2019-10-02', '2019-10-03']],
           labels=[[1, 1, 1, 0, 0, 0, 2, 2, 2, 3, 3, 3], [2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0]],
           names=['公司', '日期'])
stocks
stocks.sort_index(inplace = True)
stocks
收盘	开盘	高	低	交易量	涨跌幅
公司	日期						
BABA	2019-10-01	165.15	168.01	168.23	163.64	14.19	-0.01
2019-10-02	165.77	162.82	166.88	161.90	11.60	0.00
2019-10-03	169.48	166.65	170.18	165.00	10.39	0.02
BIDU	2019-10-01	102.00	102.80	103.26	101.00	1.78	-0.01
2019-10-02	102.62	100.85	103.24	99.50	2.69	0.01
2019-10-03	104.32	102.35	104.73	101.15	2.24	0.02
IQ	2019-10-01	15.92	16.14	16.22	15.50	11.65	-0.01
2019-10-02	15.72	15.85	15.87	15.12	8.10	-0.01
2019-10-03	16.06	15.71	16.38	15.32	10.08	0.02
JD	2019-10-01	28.19	28.22	28.57	27.97	10.64	0.00
2019-10-02	28.06	28.00	28.22	27.53	9.53	0.00
2019-10-03	28.80	28.11	28.97	27.82	8.77	0.03
四、DataFrame有多层索引Multilndex怎样筛选数据

【重要知识】在选择数据时:

1.元组(key1,key2)代表筛选多层索引,其中key1是索引第一级,key2是第二级,比如key1=JD,key2=2019-10-2

2.列表[key1,key2]表示同一层的多个key,其中key1和key2是并列的同级索引,比如key1 = JD,key2 = BIDU

BIDU
stocks.loc['BIDU']
收盘	开盘	高	低	交易量	涨跌幅
日期						
2019-10-01	102.00	102.80	103.26	101.00	1.78	-0.01
2019-10-02	102.62	100.85	103.24	99.50	2.69	0.01
2019-10-03	104.32	102.35	104.73	101.15	2.24	0.02
stocks.loc[('BIDU','2019-10-02'),:]
stocks.loc[('BIDU','2019-10-02'),:]
收盘     102.62
开盘     100.85
高      103.24
低       99.50
交易量      2.69
涨跌幅      0.01
Name: (BIDU, 2019-10-02), dtype: float64
'开盘'
stocks.loc[('BIDU','2019-10-02'),'开盘']
100.84999999999999
stocks.loc[['BIDU','JD'],:]
stocks.loc[['BIDU','JD'],:]
收盘	开盘	高	低	交易量	涨跌幅
公司	日期						
BIDU	2019-10-01	102.00	102.80	103.26	101.00	1.78	-0.01
2019-10-02	102.62	100.85	103.24	99.50	2.69	0.01
2019-10-03	104.32	102.35	104.73	101.15	2.24	0.02
JD	2019-10-01	28.19	28.22	28.57	27.97	10.64	0.00
2019-10-02	28.06	28.00	28.22	27.53	9.53	0.00
2019-10-03	28.80	28.11	28.97	27.82	8.77	0.03
stocks.loc[(['BIDU','JD'],'2019-10-02'),:]
stocks.loc[(['BIDU','JD'],'2019-10-02'),:]
收盘	开盘	高	低	交易量	涨跌幅
公司	日期						
BIDU	2019-10-02	102.62	100.85	103.24	99.50	2.69	0.01
JD	2019-10-02	28.06	28.00	28.22	27.53	9.53	0.00
'2019-10-02'
stocks.loc[(['BIDU','JD'],'2019-10-02'),'开盘']
公司    日期        
BIDU  2019-10-02    100.85
JD    2019-10-02     28.00
Name: 开盘, dtype: float64
'2019-10-02','2019-10-03'
stocks.loc[('BIDU',['2019-10-02','2019-10-03']),'开盘']
公司    日期        
BIDU  2019-10-02    100.85
      2019-10-03    102.35
Name: 开盘, dtype: float64
stocks.reset_index()
公司	日期	收盘	开盘	高	低	交易量	涨跌幅
0	BABA	2019-10-01	165.15	168.01	168.23	163.64	14.19	-0.01
1	BABA	2019-10-02	165.77	162.82	166.88	161.90	11.60	0.00
2	BABA	2019-10-03	169.48	166.65	170.18	165.00	10.39	0.02
3	BIDU	2019-10-01	102.00	102.80	103.26	101.00	1.78	-0.01
4	BIDU	2019-10-02	102.62	100.85	103.24	99.50	2.69	0.01
5	BIDU	2019-10-03	104.32	102.35	104.73	101.15	2.24	0.02
6	IQ	2019-10-01	15.92	16.14	16.22	15.50	11.65	-0.01
7	IQ	2019-10-02	15.72	15.85	15.87	15.12	8.10	-0.01
8	IQ	2019-10-03	16.06	15.71	16.38	15.32	10.08	0.02
9	JD	2019-10-01	28.19	28.22	28.57	27.97	10.64	0.00
10	JD	2019-10-02	28.06	28.00	28.22	27.53	9.53	0.00
11	JD	2019-10-03	28.80	28.11	28.97	27.82	8.77	0.03
,:
#slice(None)代表筛选这一索引的所有内容
stocks.loc[(slice(None),['2019-10-02','2019-10-03']),:]
收盘	开盘	高	低	交易量	涨跌幅
公司	日期						
BABA	2019-10-02	165.77	162.82	166.88	161.90	11.60	0.00
2019-10-03	169.48	166.65	170.18	165.00	10.39	0.02
BIDU	2019-10-02	102.62	100.85	103.24	99.50	2.69	0.01
2019-10-03	104.32	102.35	104.73	101.15	2.24	0.02
IQ	2019-10-02	15.72	15.85	15.87	15.12	8.10	-0.01
2019-10-03	16.06	15.71	16.38	15.32	10.08	0.02
JD	2019-10-02	28.06	28.00	28.22	27.53	9.53	0.00
2019-10-03	28.80	28.11	28.97	27.82	8.77	0.03

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-08-25 12:09:51  更:2021-08-25 12:11:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 11:46:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码