当前位置: 首页 > news >正文

pandas教程:Hierarchical Indexing 分层索引、排序和统计

文章目录

  • Chapter 8 Data Wrangling: Join, Combine, and Reshape(数据加工:加入, 结合, 变型)
  • 8.1 Hierarchical Indexing(分层索引)
  • 1 Reordering and Sorting Levels(重排序和层级排序)
  • 2 Summary Statistics by Level (按层级来归纳统计数据)
  • 3 Indexing with a DataFrame’s columns(利用DataFrame的列来索引)

Chapter 8 Data Wrangling: Join, Combine, and Reshape(数据加工:加入, 结合, 变型)

在很多应用中,数据通常散落在不同的文件或数据库中,并不方便进行分析。这一章主要关注工具,能帮我们combine, join, rearrange数据。

8.1 Hierarchical Indexing(分层索引)

Hierarchical Indexingpandas中一个重要的特性,能让我们在一个轴(axis)上有多个index levels(索引层级)。它可以让我们在低维格式下处理高维数据。这里给出一个简单的例子,构建一个series,其indexa list of lists:

import pandas as pd
import numpy as np
data = pd.Series(np.random.randn(9),index=[['a', 'a', 'a', 'b', 'b', 'c', 'c', 'd', 'd'],[1, 2, 3, 1, 3, 1, 2, 2, 3]])
data
a  1    0.6360822   -1.4130613   -0.530704
b  1   -0.0416343   -0.042303
c  1    0.4299112    0.783350
d  2    0.2843283   -0.360963
dtype: float64

其中我们看到的是把MultiIndex作为index(索引)的,美化过后series

data.index
MultiIndex(levels=[['a', 'b', 'c', 'd'], [1, 2, 3]],labels=[[0, 0, 0, 1, 1, 2, 2, 3, 3], [0, 1, 2, 0, 2, 0, 1, 1, 2]])

对于这种分层索引对象,partial indexing(部分索引)也是能做到的,这种方法可以让我们简洁地选中数据的一部分:

data['b']
1   -0.041634
3   -0.042303
dtype: float64
data['b': 'c']
b  1   -0.0416343   -0.042303
c  1    0.4299112    0.783350
dtype: float64
data.loc[['b', 'd']]
b  1   -0.0416343   -0.042303
d  2    0.2843283   -0.360963
dtype: float64

selection(选中)对于一个内部层级(inner level)也是可能的:

data.loc[:, 2]
a   -1.413061
c    0.783350
d    0.284328
dtype: float64

分层索引的作用是改变数据的形状,以及做一些基于组的操作(group-based)比如做一个数据透视表(pivot table)。例子,我们可以用unstack来把数据进行重新排列,产生一个DataFrame

data.unstack()
123
a0.636082-1.413061-0.530704
b-0.041634NaN-0.042303
c0.4299110.783350NaN
dNaN0.284328-0.360963

相反的操作是stack:

data.unstack().stack()
a  1    0.6360822   -1.4130613   -0.530704
b  1   -0.0416343   -0.042303
c  1    0.4299112    0.783350
d  2    0.2843283   -0.360963
dtype: float64

之后的章节会对unstackstack做更多介绍。

对于dataframe,任何一个axis(轴)都可以有一个分层索引:

frame = pd.DataFrame(np.arange(12).reshape((4, 3)),index=[['a', 'a', 'b', 'b'], [1, 2, 1, 2]],columns=[['Ohio', 'Ohio', 'Colorado'],['Green', 'Red', 'Green']])
frame
OhioColorado
GreenRedGreen
a1012
2345
b1678
291011

每一层级都可以有一个名字(字符串或任何python对象)。如果有的话,这些会显示在输出中:

frame.index.names = ['key1', 'key2']
frame.columns.names = ['state', 'color']
frame
stateOhioColorado
colorGreenRedGreen
key1key2
a1012
2345
b1678
291011

这里我们要注意区分行标签(row label)中索引的名字’state’和’color’。

如果想要选中部分列(partial column indexing)的话,可以选中一组列(groups of columns):

frame['Ohio']
colorGreenRed
key1key2
a101
234
b167
2910

MultiIndex能被同名函数创建,而且可以重复被使用;在DataFrame中给列创建层级名可以通过以下方式:

pd.MultiIndex.from_arrays([['Ohio', 'Ohio', 'Colorado'], ['Green', 'Red', 'Green']],names=['state', 'color'])
MultiIndex(levels=[['Colorado', 'Ohio'], ['Green', 'Red']],labels=[[1, 1, 0], [0, 1, 0]],names=['state', 'color'])

1 Reordering and Sorting Levels(重排序和层级排序)

有时候我们需要在一个axis(轴)上按层级进行排序,或者在一个层级上,根据值来进行排序。swaplevel会取两个层级编号或者名字,并返回一个层级改变后的新对象(数据本身并不会被改变):

frame.swaplevel('key1', 'key2')
stateOhioColorado
colorGreenRedGreen
key2key1
1a012
2a345
1b678
2b91011

另一方面,sort_index则是在一个层级上,按数值进行排序。比如在交换层级的时候,通常也会使用sort_index,来让结果按指示的层级进行排序:

frame.sort_index(level=1)
stateOhioColorado
colorGreenRedGreen
key1key2
a1012
b1678
a2345
b291011
frame.sort_index(level='color') 
frame.sort_index(level='state') 
# 这两个语句都会报错

(按照我的理解,level指的是key1key2key1level=0,key2level=1。可以看到下面的结果和上面是一样的:)

frame.sort_index(level='key2') 
stateOhioColorado
colorGreenRedGreen
key1key2
a1012
b1678
a2345
b291011
frame.swaplevel(0, 1).sort_index(level=0) # 把key1余key2交换后,按key2来排序
stateOhioColorado
colorGreenRedGreen
key2key1
1a012
b678
2a345
b91011

如果index是按词典顺序那种方式来排列的话(比如从外层到内层按a,b,c这样的顺序),在这种多层级的index对象上,数据选择的效果会更好一些。这是我们调用sort_index(level=0) or sort_index()

2 Summary Statistics by Level (按层级来归纳统计数据)

DataFrameSeries中,一些描述和归纳统计数据都是有一个level选项的,这里我们可以指定在某个axis下,按某个level(层级)来汇总。比如上面的DataFrame,我们可以按 行 或 列的层级来进行汇总:

frame
stateOhioColorado
colorGreenRedGreen
key1key2
a1012
2345
b1678
291011
frame.sum(level='key2')
stateOhioColorado
colorGreenRedGreen
key2
16810
2121416
frame.sum(level='color', axis=1)
colorGreenRed
key1key2
a121
284
b1147
22010

3 Indexing with a DataFrame’s columns(利用DataFrame的列来索引)

DataFrame里的一列或多列作为行索引(row index)是一件很常见的事;另外,我们可能还希望把行索引变为列。这里有一个例子:

frame = pd.DataFrame({'a': range(7), 'b': range(7, 0, -1),'c': ['one', 'one', 'one', 'two', 'two','two', 'two'],'d': [0, 1, 2, 0, 1, 2, 3]})
frame
abcd
007one0
116one1
225one2
334two0
443two1
552two2
661two3

DataFrameset_index会把列作为索引,并创建一个新的DataFrame

frame2 = frame.set_index(['c', 'd'])
frame2
ab
cd
one007
116
225
two034
143
252
361

默认删除原先的列,当然我们也可以留着:

frame.set_index(['c', 'd'], drop=False)
abcd
cd
one007one0
116one1
225one2
two034two0
143two1
252two2
361two3

另一方面,reset_index的功能与set_index相反,它会把多层级索引变为列:

frame2.reset_index()
cdab
0one007
1one116
2one225
3two034
4two143
5two252
6two361

相关文章:

pandas教程:Hierarchical Indexing 分层索引、排序和统计

文章目录 Chapter 8 Data Wrangling: Join, Combine, and Reshape(数据加工:加入, 结合, 变型)8.1 Hierarchical Indexing(分层索引)1 Reordering and Sorting Levels(重排序和层级排序)2 Summa…...

Redis 扩展 RedisBloom 插件,解决缓存击穿、穿透

文章目录 一、概述二、编译准备2.1 升级 make2.2 安装 Python3 三、编译 RedisBloom四、测试 RedisBloom五、应用场景5.1 缓存击穿5.2 缓存穿透5.3 原理总结 六、存在的问题 如果您对Redis的了解不够深入请关注本栏目,本栏目包括Redis安装,Redis配置文件…...

VBA技术资料MF80:选择文件及文件夹

我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。我的教程一共九套,分为初级、中级、高级三大部分。是对VBA的系统讲解,从简单的入门,到…...

网络层:控制平面

路由选择算法 路由选择算法就是为了在端到端的数据传输中,选择路径上路由器的最好的路径。通常,一条好的路径指具有最低开销的路径。最低开销路径是指源和目的地之间具有最低开销的一条路。 根据集中式还是分散式来划分 集中式路由选择算法&#xff1a…...

Ubuntu 系统内核 kernel panic

Ubuntu 系统内核 kernel panic 不能进入系统:报错end kernel panic -not syncing: attemped to kill init! exit code 0x00000100 系统启动的时候,按下‘e’键进入grub编辑界面,编辑grub菜单,选择“kernel /vmlinuz-XXXXro root…...

【flink】RowData copy/clone方式

说明:一般用户常用的是GenericRowData。flink内部则多使用BinaryRowData。 方法一、循环解决(不推荐): 代码较为复杂需要根据RowType获取到内部fields的logicalType,再使用RowData.createFieldGetter方法创建fieldGetters。 public static …...

网页图标工具

工具地址...

掌动智能:功能测试及拨测主要功能

在企业中对于功能测试及拨测而言,用户只需提供应用包和产品文档,由资深测试专家设计并执行测试,覆盖核心场景,包含特定业务流程以及行业通用特殊场景,支持需求定制。 执行过程严格监控,依据应用功能和业务需…...

第11章 Java集合(二)

目录 内容说明 章节内容 一、Set接口 二、HashSet集合 三、LinkedHashSet集合 四、TreeSet集合...

Transformer和ELMo模型、word2vec、独热编码(one-hot编码)之间的关系

下面简要概述了Transformer和ELMo模型、word2vec、独热编码(one-hot编码)之间的关系: 独热编码(One-hot Encoding)是一种最基本的词表示方法,将词表示为高维稀疏向量。它与ELMo、word2vec和Transformer的关…...

您与1秒钟测量两千个尺寸之间仅差一台智能测径仪!

随着产线的发展,自动化程度越来越高,生产速度越来越快,人们对产品的品质要求越来越高,对检测也提出了更高的要求。传统的检测与测量手段已经很难满足测量效率要求,业内迫切需要一种新型高效率的测量设备。 产线多种多样…...

k8s之service五种负载均衡byte的区别

1,什么是Service? 1.1 Service的概念​ 在k8s中,service 是一个固定接入层,客户端可以通过访问 service 的 ip 和端口访问到 service 关联的后端pod,这个 service 工作依赖于在 kubernetes 集群之上部署的一个附件&a…...

Unity项目转微信小游戏保姆教程,繁杂问题解决,及微信小游戏平台简单性能测试

前言 借着某人需求,做了一波简单的技术调研:将Unity项目转换为微信小游戏。 本文主要内容:Unity转换小游戏的步骤,遇到问题的解决方法,以及简单的性能测试对比 微信小游戏的限制 微信小游戏对程序包体大小有严格限制…...

json字符串转为开闭区间

1.需求背景 1.1 前端页面展示 1.2 前后端约定交互json 按照页面每一行的从左到右 * 示例 [{"leftSymbol":">","leftNum":100,"relation":"无","rightSymbol":null,"rightNum":0}, {"left…...

STM32 IIC 实验

1. 可以选择I2C1,也可以选择I2C2,或者同时选择,同时运行 配置时钟信号 为节约空间,选择这两个,然后选择GENERATE CODE 二、HAL_I2C_Mem_Write I2C_HandleTypeDef *hi2c:I2C设备句柄 uint16_t DevAddress&am…...

第六章 包图组织模型|系统建模语言SysML实用指南学习

仅供个人学习记录 概述 包是容器的一个例子。包中的模型元素称为可封装元素,这些元素可以是包、用例和活动。由于包本身也是可封装元素,因此可以支持包层级。 每个有名称的模型元素也必须是命名空间的一份子,命名空间使得每个元素均能够通过…...

使用 Rust 进行程序

首先,我们需要安装必要的库。在终端中运行以下命令来安装 scraper 和 reqwest 库: rust cargo install scraper reqwest 然后,我们可以开始编写程序。以下是一个基本的爬虫程序,用于爬取 上的图片: rust use reqwe…...

第10章 增长和扩展你的 Micro SaaS 应用程序

接下来,我们进入真正增长 Micro SaaS 应用用户群和订阅收入的激动人心的话题。 即使在增长阶段,你也不能忽视客户满意度,确保你与时俱进,在路线图上添加你承诺的功能,然后通过 SaaS 营销吸引更多用户。 也就是说,让我们来看看增长您的 Micro SaaS 应用程序的关键战略要…...

第八章《搞懂算法:逻辑回归是怎么回事》笔记

8.1 如何理解逻辑回归 逻辑回归根据给定的自变量数据集来估计事件的发生概率,由于结果是一个概率,因此因变量的范围在 0 和 1 之间。 逻辑回归的与线性回归一样,也是以线性函数为基础的;而与线性回归不同的是,逻辑回…...

【WinForm详细教程八】WinForm中的TreeView控件

文章目录 TreeView 基本的知识属性方法事件 TreeView 案例演示案例一:案例二: TreeView 控件 用于展示分层数据,它以树形结构展示信息,每个节点可以有一个或多个子节点。TreeView 控件允许用户以可展开和可折叠的形式查看复杂的层…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

python/java环境配置

环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...

MySQL账号权限管理指南:安全创建账户与精细授权技巧

在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则&#xf…...

【生成模型】视频生成论文调研

工作清单 上游应用方向:控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...