Python学习——数据分组统计、分组运算及透视

news2024/11/15 21:44:10

目录

  • 1 数据分组统计 groupby
    • 1.1 按照单列进行分组统计df.groupby('列名').count()
    • 1.2 按照多列进行分组统计 df.groupby(['列名1','列名2']).count()
    • 1.3 分组填充缺失值 df.groupby('需填充列名').apply(lambda x:x.fillna(x.mean()))
  • 2 分组运算 agg
    • 2.1 传入标准函数 df.groupby('班级').agg(np.sum)
    • 2.2 不同的列不同的聚合函数 df.groupby('班级').agg({'数量':np.sum,'分数':np.mean})
    • 2.3 自定义函数
    • 2.4 调用多个聚合函数
  • 3 数据透视表
    • 3.1 透视表 pivot_table
    • 3.2 交叉表 crosstab

1 数据分组统计 groupby

分割 split: 按照键值(key)或者分组变量将数据分组
应用 apply: 对每个组应用函数, 通常是累计,转换或过滤函数
组合 combine: 将每一组的结果合并成一个输出组

常用功能

1. len(gp1) #组数
2. gp1.size() #每组的记录个数
3. df3.groupby(["小组","评级"])  #得到的结果是一个groupby对象
4. gp1.mean()  #每组组内的平均值,还有sum、max、min、count
5. apply #自定义统计函数(自己定义一个函数,作为参数,会自动将函数应用到每一组数据当中去)

1.1 按照单列进行分组统计df.groupby(‘列名’).count()

# 创建示例DataFrame
data = {'班级': ['一班', '一班','一班','二班', '二班','二班','三班','三班','三班'],
        '科目': ['物理', '化学', '生物','物理', '化学', '生物','物理', '化学', '生物'],
        '数量': [17, 29, 18,37,48,32,17, 29, 18],
        '分数': [87, 89, 88,77,98,82,97, 89, 78]}
df = pd.DataFrame(data)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

# 创建示例DataFrame
data = {'班级': ['一班', '一班','一班','二班', '二班','二班','三班','三班','三班'],
        '科目': ['物理','生物','生物','物理', '物理', '生物','化学', '化学', '生物'],
        '姓名': ['张三', '章中', '贺天','紫瞳','西德','魏斯','明峰', '希方', '塞法'],
        '分数': [87, 89, 88,77,98,82,97, 89, 78]}
df = pd.DataFrame(data)
#实现组内排序,排序的时候,科目作为第一排序依据,用来排序的数值字段(分数)作为第二排序依据
df.sort_values(['科目','分数'],ascending=[False,True]).groupby('科目').head(3)

在这里插入图片描述

1.2 按照多列进行分组统计 df.groupby([‘列名1’,‘列名2’]).count()

# 创建示例DataFrame
data = {'班级': ['一班', '一班','一班','二班', '二班','二班','三班','三班','三班'],
        '科目': ['物理','生物','生物','物理', '物理', '生物','化学', '化学', '生物'],
        '姓名': ['张三', '章中', '贺天','紫瞳','西德','魏斯','明峰', '希方', '塞法'],
        '分数': [87, 89, 88,77,98,82,97, 89, 78]}
df = pd.DataFrame(data)
#按照科目、班级进行分组求平均
df[['科目','班级','分数']].groupby(['科目','班级']).mean()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.3 分组填充缺失值 df.groupby(‘需填充列名’).apply(lambda x:x.fillna(x.mean()))

# 创建示例DataFrame
data = {'年级': ['1', '1','1','2', '2','3','3','3','3'],
        '姓名': ['张三', '章中', '贺天','紫瞳','西德','魏斯','明峰', '希方', '塞法'],
        '年龄': [17, 19, np.NaN,18,np.NaN,15,18, 18,np.NaN ]}
df = pd.DataFrame(data)
df

在这里插入图片描述

#按照年级分组填充缺失的年龄
df.groupby('年级').apply(lambda x:x.fillna(x.mean()))

在这里插入图片描述
新增加一列 年龄ew 将填充后的年龄补充上去
在这里插入图片描述

2 分组运算 agg

数据聚合(agg):一般指的是能够从数组产生的标量值的数据转换过程,常见的聚合运算都有相关的统计函数快速实现,也可以自定义聚合运算。

2.1 传入标准函数 df.groupby(‘班级’).agg(np.sum)

data = {'班级': ['一班', '一班','一班','二班', '二班','二班','三班','三班','三班'],
        '科目': ['物理', '化学', '生物','物理', '化学', '生物','物理', '化学', '生物'],
        '数量': [17, 29, 18,37,48,32,17, 29, 18],
        '分数': [87, 89, 88,77,98,82,97, 89, 78]}
df = pd.DataFrame(data)
#数值列按照分组标准快速聚合
df.groupby('班级').agg(np.sum) 

在这里插入图片描述

2.2 不同的列不同的聚合函数 df.groupby(‘班级’).agg({‘数量’:np.sum,‘分数’:np.mean})

#不同的列传入不同的函数
mappping = {'数量':np.sum,'分数':np.mean}
df.groupby('班级').agg(mappping)

在这里插入图片描述

2.3 自定义函数

#求针对各科目最高分数与最低分数之间的差值
def cha(x):
    return x.max() - x.min()
df[['科目','分数']].groupby('科目').agg([cha])

在这里插入图片描述

2.4 调用多个聚合函数

df[['班级','分数']].groupby('班级').agg([np.max,np.min,np.mean])

在这里插入图片描述

3 数据透视表

3.1 透视表 pivot_table

透视表(pivot table): 透视表指根据一个或多个键值对数据进行聚合,根据行或列的分组键将数据划分到各个区域中

#pivot_table 其实就是将groupby封装起来了
df[['班级','分数']].pivot_table(index = ['班级']) #先按照班级分组,再求mean

在这里插入图片描述

data = {'班级': ['一班', '一班','一班','二班', '二班','二班','三班','三班','三班'],
        '科目': ['物理', '化学', '生物','物理', '化学', '生物','物理', '化学', '生物'],
        '数量': [17, 29, 18,37,48,32,17, 29, 18],
        '分数': [87, 89, 88,77,98,82,97, 89, 78]}
df = pd.DataFrame(data)
df.pivot_table(index = ['班级','科目']) #先按照班级然后按照科目分许,默认求均值

在这里插入图片描述

df.pivot_table(index = ['班级'],aggfunc = np.sum)#求和

在这里插入图片描述

pd.pivot_table(df3,values="总分",index="评级",columns=["班级","小组"])

在这里插入图片描述

3.2 交叉表 crosstab

交叉表(crosstab): 交叉表用于统计分组频率的特殊透视表
在这里插入图片描述

#groupby实现pd.crosstab(df['班级'],df['科目']) 
df[['班级','科目','姓名']].groupby(['班级','科目']).count().unstack().fillna(0)

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/671307.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机器学习之KNN(K近邻)算法

1 KNN算法介绍 KNN算法又叫做K近邻算法,是众多机器学习算法里面最基础入门的算法。KNN算法是最简单的分类算法之一,同时,它也是最常用的分类算法之一。KNN算法是有监督学习中的分类算法,它看起来和Kmeans相似(Kmeans是…

乱七八糟知识点

知识点汇总 看一个文件的前n行、指定行、末n行idea 创建快捷测试文件Mac版 pycharm 快捷键ideaMac 终端MySQL 安装完,初始密码一般存在vim操作搜索引擎 看一个文件的前n行、指定行、末n行 # 先准备一个文件 ➜ tmp cat a.txt 001 002 003 004 005 006# 查看前2行…

不变的是需求,变化的是解决方法和工具:探讨iPaaS与ESB的差异

在企业数字化转型过程中,企业需要面临日益复杂的业务和数据集成挑战。为了应对这些挑战,需要借助适当的解决方法和工具来实现系统间的通信和数据传输。在这方面,iPaaS(Integration Platform as a Service)和ESB&#x…

STM32外设系列—OLED

文章目录 一、OLED简介二、数据手册分析2.1 供电电压2.2 引脚定义2.3 原理图介绍2.4 数据手册程序 三、IIC通信3.1 什么是IIC3.2 IIC通信协议3.3 IIC主从通信过程3.3.1 写入数据3.3.2 读取数据 四、OLED程序设计4.1 OLED初始化4.2 OLED控制函数编写4.2.1 OLED显示开/关程序4.2.…

ECCV2022 多目标跟踪(MOT)汇总

一、《Towards Grand Unification of Object Tracking》 作者: Bin Yan1⋆, Yi Jiang2,†, Peize Sun3, Dong Wang1,†,Zehuan Yuan2, Ping Luo3, and Huchuan Lu School of Information and Communication Engineering, Dalian University of Technology, China 2 ByteDance …

企业级开发环境配置(JDK、tomcat、Maven、Git、IDEA个性化界面的设定)

企业级开发环境配置(JDK、tomcat、Maven、Git、IDEA个性化界面的设定) 一、JRE,JDK8安装和环境变量配置1. 进入Oracle官网进行jdk8安装包的下载2. 选择安装路径,安装路径不要出现中文以及空格3. 环境变量的配置4. 安装验证 二、Tomcat 安装和…

性能测试面试题:如何测试App性能?(面试必问)

为什么要做App性能测试? 如果APP总是出现卡顿或网络延迟的情况,降低了用户的好感,用户可能会抛弃该App,换同类型的其他应用。如果APP的性能较好,用户体验高,使用起来丝滑顺畅,那该应用的用户粘…

Nginx入门?看这一篇就够了

Nginx?看这一篇就够了 前言Nginx介绍没有好用的?那就自己做一个!Nginx的发展历程Nginx的特性(为什么要用Nginx) 异步事件驱动同步事件驱动同步事件驱动的问题 异步事件驱动异步非阻塞与同步非阻塞并发和并行I/O多路复用…

【数据关联】基于Patch的对应特征关联,关联当前帧->参考帧,帧间追踪

帧间追踪与数据关联 1. WarpPixelWise(求当前帧特征点位置)1.1 函数功能1.2 函数输入输出1.3 算法步骤 2. GetWarpMatrixAffine(计算 当前帧->参考帧 仿射变换矩阵)2.1 函数功能2.2 函数输入输出2.3 算法步骤 3. GetWarpMatrixAffine(计算 当前帧->参考帧 仿射变换矩阵)3…

modbus TCP协议讲解及实操

具体讲解 前言正文modbus tcp主机请求数据基本讲解Modbus Poll工具简单使用讲解 modbus tcp从机响应数据Modbus Slave工具简单使用讲解 前言 关于modbus tcp从0到1的讲解,案例结合讲解,详细了解整个modbus的可以参考这个:详解Modbus通信协议…

【吃透网络安全】2023软考网络管理员考点网络安全(一)安全基础篇

涉及知识点 软考网络管理员,软考网络管理员常考知识点,软考网络管理员网络安全,网络管理员考点汇总。 后面还有更多续篇希望大家能给个赞哈,这边提供个快捷入口! 第一节 网络管理员考点网络安全(1&#…

【广州华锐互动】钢厂轧钢事故3D虚拟体验还原真实事故场景

由于钢厂生产过程中涉及到高温、高压、高负荷等危险因素,一旦出现操作不当、设备故障等问题,就可能导致严重的事故。因此,对于钢厂员工来说,接受事故教育、了解安全知识非常重要,可以提高他们的安全意识,避…

大数据行业对学历要求高么

《2020中国大数据产业发展白皮书》显示,2019年中国大数据产业规模达5397亿元,同比增长23.1%,随后稳定增长,预计到2022年将突破万亿元。 根据LinkedIn、赛迪智库、拉勾网等机构的统计结果,大数据时代下的数据人才总体缺…

【软考程序员学习笔记】——程序设计语言

目录 🍊一、常见的程序设计语言 🍊二、程序设计语言组成 🍊三、后缀表达式 🍊四、传值调用和传址调用 🍊五、语言处理程序 🍊六、解释程序 🍊七、链接程序 🍊八、编译程序 &…

国产替代FT232RL-USB到UART桥接控制器 GP232RNL

GP232RNL是一款高度集成的USB到UART桥接控制器,提供了一种简单的解决方案,可以使用最少的元器件和PCB空间,将RS232接口转换为USB接口。GP232RNL包括一个USB 2.0全速功能控制器、USB收发器、振荡器、EEPROM和带有完整的调制解调器控制信号的异…

Java GUI开发的几个小工具:apk/aab签名,验证签名,aab转apk

平时经常给apk/aab签名,验证签名,aab转apk等操作,每次输入命令行十分繁琐。于是利用JAVA GUI简单开发了几个jar包界面化工具,提供给大家一起使用。 工具功能JarSignerTool.jar为apk/aab签名ApkSignerTool.jar为apk签名AppSignVer…

Cloud Studio 浏览器插件来啦

当谈到Cloud Studio浏览器插件的优势时,最显著的就是它的便捷性。通过安装Cloud Studio浏览器插件,用户可以在浏览器中直接打开Cloud Studio的开发环境,无需切换到其他应用程序,从而提高了开发效率。 另一个优势是插件对于Github…

Logstash入门简介

目录 Logstash简介介绍用途部署安装测试配置详解输入过滤输出 读取自定义日志日志结构编写配置文件输出到Elasticsearch Logstash简介 介绍 Logstash是一个开源的服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到…

了解一下EPC模式和它的优势

目录 什么是EPCEPC的优势有哪些?BT、BOT、EPC分别是什么模式?总结 什么是EPC EPC是Engineering(工程):代表设计、采购和施工总承包。Procurement(采购):代表采购和物资管理。Constru…

Stable Diffusion提示词总结

提示词基本语法 一、提示词类别 1、内容型提示词 人物及主体特征 服饰穿搭 white dress 发型发色 blonde hair,long hair 五官特征 small eye,big mouth 面部表情 smiling 肢体动作 stretching arms beautiful detailed eyes 美丽细致的眼睛 highl…