Python Pandas分组操作:transform与apply的使用

大家好,在数据分析中,分组操作是处理数据的常用手段。Python的Pandas库提供了丰富的分组操作功能,其中 transformapply 是两个非常重要的工具,它们可以帮助我们在分组后对数据进行转换和处理。本文将介绍 transformapply 的运用,探讨它们的区别与应用场景,并通过具体的示例代码展示其在实际工作中的使用方法。

1.Pandas分组操作概述

在使用Pandas进行数据分析时,分组操作通常与 groupby 函数结合使用。groupby 可以将数据集按照某一列或多列进行分组,并对每个分组应用某种操作,例如计算平均值、求和等。transformapply 是两种在分组后进行数据转换的常用方法,它们可以灵活地对分组数据进行进一步处理。

transform:对每个分组执行某种操作,并将结果“广播”回原始数据结构。这意味着结果的形状与原始数据相同。transform 适用于需要在分组级别上执行计算并将结果与原始数据对齐的情况。

apply:允许我们在每个分组上应用任意的函数,返回的结果可以是标量、系列或数据帧。apply 提供了更大的灵活性,适用于需要对分组数据进行复杂操作的情况。

2.使用 transform 进行分组转换

transform 函数主要用于对分组数据进行逐元素的转换操作,返回的结果具有与原始数据相同的索引。

2.1 按组计算均值并进行转换

假设有一组学生的成绩数据,并希望计算每个班级的平均成绩,并将其分配给每个学生。

import pandas as pd# 创建一个数据框
data = {'班级': ['A', 'A', 'B', 'B', 'C', 'C'],'学生': ['张三', '李四', '王五', '赵六', '钱七', '孙八'],'成绩': [85, 90, 78, 82, 88, 92]}df = pd.DataFrame(data)# 按班级分组,并计算每个班级的平均成绩
df['班级均分'] = df.groupby('班级')['成绩'].transform('mean')print(df)

运行以上代码,输出结果为:

  班级  学生  成绩  班级均分
0  A  张三  85  87.5
1  A  李四  90  87.5
2  B  王五  78  80.0
3  B  赵六  82  80.0
4  C  钱七  88  90.0
5  C  孙八  92  90.0

在这个示例中,transform 函数计算了每个班级的平均成绩,并将结果“广播”回原始数据框,生成了新的 班级均分 列。

2.2 按组标准化数据

transform 也可以用于对分组数据进行标准化处理。例如,对每个班级的成绩进行标准化,使得每个班级的成绩均值为0,标准差为1。

import pandas as pd# 创建一个数据框
data = {'班级': ['A', 'A', 'B', 'B', 'C', 'C'],'学生': ['张三', '李四', '王五', '赵六', '钱七', '孙八'],'成绩': [85, 90, 78, 82, 88, 92]}df = pd.DataFrame(data)# 定义标准化函数
def standardize(x):return (x - x.mean()) / x.std()# 按班级分组,并对成绩进行标准化
df['标准化成绩'] = df.groupby('班级')['成绩'].transform(standardize)print(df)

运行以上代码,输出结果为:

  班级  学生  成绩  标准化成绩
0  A  张三  85  -0.707107
1  A  李四  90   0.707107
2  B  王五  78  -0.707107
3  B  赵六  82   0.707107
4  C  钱七  88  -0.707107
5  C  孙八  92   0.707107

在这个示例中,transform 函数结合自定义的 standardize 函数,对每个班级的成绩进行了标准化处理。

3.使用 apply 进行分组操作

transform 相比,apply 提供了更大的灵活性,它可以对每个分组应用自定义函数,并可以返回各种形式的结果。

3.1 按组计算成绩的范围

假设计算每个班级的成绩范围(最大值与最小值之差),并将结果添加到原始数据框中。

import pandas as pd# 创建一个数据框
data = {'班级': ['A', 'A', 'B', 'B', 'C', 'C'],'学生': ['张三', '李四', '王五', '赵六', '钱七', '孙八'],'成绩': [85, 90, 78, 82, 88, 92]}df = pd.DataFrame(data)# 定义计算范围的函数
def score_range(x):return x.max() - x.min()# 按班级分组,并计算成绩范围
df['成绩范围'] = df.groupby('班级')['成绩'].apply(score_range)print(df)

运行以上代码,输出结果为:

  班级  学生  成绩  成绩范围
0  A  张三  85    5
1  A  李四  90    5
2  B  王五  78    4
3  B  赵六  82    4
4  C  钱七  88    4
5  C  孙八  92    4

在这个示例中,apply 函数计算了每个班级的成绩范围,并将结果添加到了原始数据框中。

3.2 对分组数据应用自定义函数

apply 还可以用于对分组数据应用复杂的自定义函数。为每个班级创建一个新的列,显示每个学生成绩在班级中的相对排名。

import pandas as pd# 创建一个数据框
data = {'班级': ['A', 'A', 'B', 'B', 'C', 'C'],'学生': ['张三', '李四', '王五', '赵六', '钱七', '孙八'],'成绩': [85, 90, 78, 82, 88, 92]}df = pd.DataFrame(data)# 定义相对排名函数
def rank_within_group(x):return x.rank(pct=True)# 按班级分组,并计算相对排名
df['相对排名'] = df.groupby('班级')['成绩'].apply(rank_within_group)print(df)

运行以上代码,输出结果为:

  班级  学生  成绩  相对排名
0  A  张三  85    0.5
1  A  李四  90    1.0
2  B  王五  78    0.5
3  B  赵六  82    1.0
4  C  钱七  88    0.5
5  C  孙八  92    1.0

在这个示例中,通过 apply 函数计算了每个学生在班级中的相对排名,结果存储在新的 相对排名 列中。

综上所述,在数据分析中,Python Pandas中的 transformapply 是处理分组数据的两个强大工具。transform 适用于逐元素转换,返回的结果与原始数据框形状一致,常用于计算分组均值、标准化等操作。而 apply 提供了更大的灵活性,可以对分组数据应用自定义函数,返回的结果可以是标量、系列或数据帧,适合复杂的数据处理任务。

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

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

相关文章

Kubernetes调度单位Pod

Kubernetes调度单位Pod 1 Pod简介 不直接操作容器container。 一个 pod 可包含一或多个容器(container),它们共享一个 namespace(用户,网络,存储等),其中进程之间通过 localhost 本地…

iOS 巨魔技巧:一键汉化巨魔商店

嘿,这是黑猫。iOS 巨魔商店一直都有个严重的问题:界面纯英文,不支持简体中文。 当然了,在IT行业,英语是通用语言。但是,既然巨魔/越狱面向普罗大众的技术,那么做好语言适配,还是很关…

idea插件开发系列1-环境搭建

前言 还记着10多年前有幸接触了eclipse插件开发,10多年后的今天有开发了idea的插件,真是一个轮回! 为什么要学习idea插件开发呢? 目前公司使用自己的MVC框架,没有相应的idea插件支持(如类似mybatis插件可…

Redis简单介绍与安装应用

在当今的互联网时代,数据的快速存取和处理变得至关重要。Redis,作为一种高性能的键值存储系统,已经成为许多开发者和企业的首选。本文将简要介绍Redis的基本概念、工作原理以及其在实际应用中的一些典型用例。 一、简介 1)概念 …

centos7 docker部署nacos

1. 一行代码安装git yum -y install git 2. 下载最新版nacos源码: git clone https://github.com/nacos-group/nacos-docker.git 进入nacos-docker文件 cd nacos-docker 3.docker安装数据库Mysql8 按这个来就行,非常好 Docker安装mysql8-超详细、每…

记某学校小程序漏洞挖掘

前言: 遇到一个学校小程序的站点,只在前端登录口做了校验,后端没有任何校验,奇葩弱口令离谱进去,站点里面越权泄露敏感信息,接管账号等漏洞!!! 渗透思路 1.绕过前端 …

docker 创建showdoc服务 showdoc容器部署教程

1. 下载最新版本镜像 # 按照最新版本 docker pull star7th/showdoc 2. 创建映射文件夹: # 创建文件夹 mkdir -p /data/showdoc_data# 可写权限 chmod 777 /data/showdoc_data 3.创建容器命令: docker run -d --name showdoc --userroot --privileged…

DoppelGanger++:面向数据库重放的快速依赖关系图生成

doi:DoppelGanger: Towards Fast Dependency Graph Generation for Database Replay,点击前往 文章目录 1 简介2 架构概述3 依赖关系图3.1 符号和问题定义3.2 无 IT(k) 图3.3 无 OT 图表3.4 无 OTIT 图表3.5 无 IT[OT] 图表3.6 输出确定性保证 4 重复向后…

go-admin-ui的菜单分割线设计思路和代码实现

在菜单管理添加分割线&#xff0c;类似这种&#xff1a; 思路&#xff1a;利用空间结构和数据特点来唯一区分出分割线&#xff0c;来划分业务区域 <template><div><h1>Split Line Controller</h1><ul><li v-for"route in displayedRout…

Thinkphp5x远程命令执行 靶场攻略

环境配置 靶场&#xff1a;vulhub/thinkphp/5-rce docker-compose up -d #启动环境 漏洞复现 1.访问靶场&#xff1a;http://172.16.1.198:8080/ 2.远程命令执⾏ POC&#xff1a; ?sindex/think\app/invokefunction&functioncall_user_func_array&vars[0]system…

网安新声 | 黎巴嫩BP机爆炸事件带来的安全新挑战与反思

网安加社区【网安新声】栏目&#xff0c;汇聚网络安全领域的权威专家与资深学者&#xff0c;紧跟当下热点安全事件、剖析前沿技术动态及政策导向&#xff0c;以专业视野和前瞻洞察&#xff0c;引领行业共同探讨并应对新挑战的策略与可行路径。 9月17日&#xff0c;黎巴嫩境内发…

项目实战:lngress搭建Nginx+WP论坛+MariaDB

1. 网站架构 本次部署形式完全舍弃 Docker&#xff0c;将所有应用都置于Kubernetes&#xff0c;采用 Deployment 而非单 Pod 部署&#xff0c;稳定性得到升级。 2. 部署 MariaDB [rootk8s-master ~]# mkdir tdr [rootk8s-master ~]# cd tdr/ &#xff08;1&#xff09;定义 …

YOLOv8改进,YOLOv8添加STA注意机制(超级令牌注意力机制,CVPR2023),并二次创新C2f结构,助力涨点

改进前训练结果: 改进后训练结果: 摘要 在Transformer架构引入“超级令牌”(Super Token)的机制,旨在解决浅层网络中过多冗余的局部特征捕捉问题。传统的Transformer在捕捉长程依赖性方面表现出色,但在浅层网络中,由于局部特征冗余,导致了计算效率的低下。为了解决…

Nginx基础详解1(单体部署与集群部署、负载均衡、正反代理、nginx安装)

本阶段的任务 1.学会集群的操作概念 2.完成对Nginx的入门操作 3.使用Nginx实现集群和负载均衡 4.使用Nginx实现高可用的方案 目录 1.单体部署与集群部署 1.1单体部署的概念 1.2单体部署的优缺点 1.3集群部署的概念 1.4集群部署的优缺点 1.5集群部署需要注意的点 1.…

基于Springboot共享充电宝管理系统JAVA|VUE|SSM计算机毕业设计源代码+数据库+LW文档+开题报告+答辩稿+部署教+代码讲解

源代码数据库LW文档&#xff08;1万字以上&#xff09;开题报告答辩稿 部署教程代码讲解代码时间修改教程 一、开发工具、运行环境、开发技术 开发工具 1、操作系统&#xff1a;Window操作系统 2、开发工具&#xff1a;IntelliJ IDEA或者Eclipse 3、数据库存储&#xff1a…

CSS的弹性盒子模型(Flex box)

弹性盒子模型是CSS3的一种新的布局模式&#xff0c;弹性盒是一种当页面需要适应不同的屏幕大小以及设备类型时确保拥有合适的布局方式&#xff0c;引入弹性盒子模型的目的时提供更加有效的方式来对一个容器中的子元素进行排列&#xff0c;对齐和分配空白空间。 弹性盒子由弹性容…

玄机靶场--蚁剑流量

木马的连接密码是多少 黑客执行的第一个命令是什么 id 黑客读取了哪个文件的内容&#xff0c;提交文件绝对路径 /etc/passwd 黑客上传了什么文件到服务器&#xff0c;提交文件名 黑客上传的文件内容是什么 黑客下载了哪个文件&#xff0c;提交文件绝对路径 蚁剑流量特征总结 …

思维链在论文写作中的应用:借助ChatGPT构建完整、清晰的论证

学境思源&#xff0c;一键生成论文初稿&#xff1a; AcademicIdeas - 学境思源AI论文写作 “思维链”&#xff08;Chain of Thought&#xff0c;CoT&#xff09;是一种通过逐步推理来解决复杂问题的方法&#xff0c;这种方法能够提高AI在某些任务上的表现。在论文写作中&#…

前端——高级选择器

1.属性选择器 2.伪类选择器 - hover 鼠标悬停状态 - active 鼠标点击状态 - focus 获取焦点状态 input使用 - checked 点击勾选状态 只能单选和多选使用 示例1&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta ch…

Java Web应用升级故障案例解析

在一次Java Web应用程序的优化升级过程中&#xff0c;从Tomcat 7.0.109版本升级至8.5.93版本后&#xff0c;尽管在预发布环境中验证无误&#xff0c;但在灰度环境中却发现了一个令人困惑的问题&#xff1a;新日志记录神秘“失踪”。本文深入探讨了这一问题的排查与解决过程&…