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

news2024/9/24 6:22:41

大家好,在数据分析中,分组操作是处理数据的常用手段。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.coloradmin.cn/o/2159660.html

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

相关文章

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

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

嵌入式linux方向细分工作岗位分析

大家好,今天主要给大家分享一下,linux方向细分的工作岗位有哪些?,为即将进入linux领域的开发者指明方向。 第一:总结分布 第二:Linux BSP工程师岗位 工作内容: 1、开发和维护Linux系统的板级支持包(BSP),包括启动加载程序、设备驱动、文件系统等。 2、负责解决硬件和软…

2003-2022年各省区域创新能力评价相关指标数据(报告年份2003-2022年)

2003-2022年各省区域创新能力相关指标数据(报告年份2003-2022年) 1、来源:2003-2022年中国区城创新能力评价报告 2、指标:综合值、知识创造综合指标、研究开发投人综合指标、专利综合指标、科研论文综合指标、知识获取综合指标、…

个人导航网站介绍和部署

前言: 大家好,我是神的孩子都在歌唱,这是我csdn的博客 , 这是我做的一个神唱导航网站项目,这是一个练习项目,所以还存在很多问题,目的是方便收集和查阅日常浏览的网站,代码完全开源github&#…

LeetCode 面试经典150题 201.数字范围按位与

题目&#xff1a;给你两个整数 left 和 right &#xff0c;表示区间 [left, right] &#xff0c;返回此区间内所有数字 按位与 的结果&#xff08;包含 left 、right 端点&#xff09;。 提示&#xff1a;0 < left < right < 2^31 - 1 思路&#xff1a; 位与的特性…

leetcode91. 解码方法,动态规划

leetcode91. 解码方法 一条包含字母 A-Z 的消息通过以下映射进行了 编码 &#xff1a; “1” -> ‘A’ “2” -> ‘B’ … “25” -> ‘Y’ “26” -> ‘Z’ 然而&#xff0c;在 解码 已编码的消息时&#xff0c;你意识到有许多不同的方式来解码&#xff0c;…

【漏洞复现】HIKVISION 视频编码设备接入网关 showFile.php 任意文件下载漏洞

免责声明&#xff1a; 本文内容旨在提供有关特定漏洞或安全漏洞的信息&#xff0c;以帮助用户更好地了解可能存在的风险。公布此类信息的目的在于促进网络安全意识和技术进步&#xff0c;并非出于任何恶意目的。阅读者应该明白&#xff0c;在利用本文提到的漏洞信息或进行相关测…

PHP智慧教育新篇章优校管理系统小程序源码

智慧教育新篇章 —— 优校管理系统 &#x1f680;【开篇启航&#xff1a;智慧教育的浪潮已至】 在这个日新月异的时代&#xff0c;教育也在悄然发生着变革。随着科技的飞速发展&#xff0c;智慧教育已成为教育领域的新风尚。而“优校管理系统”&#xff0c;正是这股浪潮中的佼…

Keil5 操作

目录 1.Debug&#xff08;软件模拟调试&#xff1a;&#xff09;&#xff1a; 2.代码提示设置&#xff1a; 3.添加. c与.h文件&#xff1a; 常用技巧 安装下载推荐&#xff1a;正点原子 1.Debug&#xff08;软件模拟调试&#xff1a;&#xff09;&#xff1a; 文章讲解 …

【例题】证明极限

已知&#xff1a; ∀ ε > 0 , ∃ n > N , ∣ a n − A ∣ < ε \forall \varepsilon >0, \exist n>N,|a_n-A|<\varepsilon ∀ε>0,∃n>N,∣an​−A∣<ε 目标&#xff1a; ∀ ε > 0 , ∃ n > N 1 , ∣ a 1 . . . a n n − A ∣ < ε \…

pytorch学习笔记二:用pytorch神经网络模型做气温预测、分类任务构建和分类网络构建、卷积神经网络原理介绍

文章目录 一、搭建pytorch神经网络进行气温预测1&#xff09;基础搭建2&#xff09;实际操作标识特征和标签3&#xff09;构建成标准化的预处理数据&#xff08;做标准化收敛速度更快&#xff09; 二、按照建模顺序构建完成网络架构1&#xff09;np.array格式的标签(y)和特征(x…

从入门到精通:计算机视觉学习路线与实战项目推荐

全面解析计算机视觉的学习路径&#xff0c;深入探讨关键技术与实战项目&#xff0c;助您快速掌握核心技能 引言 随着人工智能的飞速发展&#xff0c;计算机视觉已成为AI领域中最具潜力和应用价值的分支之一。从自动驾驶到医疗影像分析&#xff0c;计算机视觉技术正在改变我们的…

9.23-部署项目

部署项目 一、先部署mariadb [rootk8s-master ~]# mkdir aaa [rootk8s-master ~]# cd aaa/ [rootk8s-master aaa]# # 先部署mariadb [rootk8s-master aaa]# # configmap [rootk8s-master aaa]# vim mariadb-configmap.yaml apiVersion: v1 kind: ConfigMap metadata:name: ma…

【通俗易懂介绍OAuth2.0协议以及4种授权模式】

文章目录 一.OAuth2.0协议介绍二.设计来源于生活三.关于令牌与密码的区别四.应用场景五.接下来分别简单介绍下四种授权模式吧1.客户端模式1.1 介绍1.2 适用场景1.3 时序图 2.密码模式2.1 介绍2.2 适用场景2.3时序图 3.授权码模式3.1 介绍3.2 适用场景3.3 时序图 4.简化模式4.1 …

【LIO-SAM】LIO-SAM论文翻译(2020年)

【LIO】LIO-SAM论文翻译&#xff08;2020年&#xff09; 1&#xff0e;Abstract&#xff12;&#xff0e;INTRODUCTION&#xff14;&#xff0e;通过平滑和映射实现激光雷达惯性里程计A. 系统概述B. IMU Preintegration Factor&#xff08;推导过程参阅&#xff09;C. Lidar Od…

对onlyoffice进行定制化开发

基于onlyoffice8.0源码&#xff0c;进行二次开发&#xff0c;可实现包括但不限于以下的功能 1、内容控件的插入 2、内容空间的批量替换 3、插入文本 4、插入图片 5、添加&#xff0c;去除水印 6、修改同时在线人数限制 7、内容域的删除 8、页面UI的定制化 9、新增插件开发 10、…

Pytest-如何将allure报告发布至公司内网

原理简介 使用Python启动HTTP服务器&#xff0c;指定一个端口号port&#xff0c;内网用户可以使用ipport访问报告。 本文章继续进阶&#xff0c;简单使用nginx进行一个代理&#xff0c;使用域名可以直接访问报告。 前情概述 Pytest-allure如何在测试完成后自动生成完整报告&am…

Ansible流程控制-条件语句_循环语句

文章目录 Ansible流程控制条件语句且、或、非、是模糊条件when指令的详细使用方法 循环语句如何使用使用item变量结合with_items或loop指令item变量有固定子元素&#xff1f; 实例-服务器安装基础环境优化需求部分实现换指定新仓库安装基础软件包 Ansible流程控制 一、 1. 条件…

opencv4.5.5 GPU版本编译

一、安装环境 1、opencv4.5.5 下载地址&#xff1a;https://github.com/opencv/opencv/archive/refs/tags/4.5.5.ziphttps://gitee.com/mirrors/opencv/tree/4.5.0 2、opencv-contrib4.5.5 下载地址&#xff1a;https://github.com/opencv/opencv_contrib/archive/refs/tags/4…

塑料瓶回收流水线分拣系统源码分享

塑料瓶回收流水线分拣检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Comp…