使用Pandas DataFrame高效执行多列算术运算

使用pandas dataframe高效执行多列算术运算

本文旨在探讨在Pandas DataFrame中对多列进行加减法运算的两种高效方法。我们将介绍如何利用`DataFrame.eval()`进行多行表达式计算,以及如何通过链式调用`add()`和`sub()`方法实现向量化操作。通过具体示例,读者将掌握在Python环境中简洁、高效地处理DataFrame列间复杂算术逻辑的技巧,从而提升数据处理效率和代码可读性

在数据分析和处理中,我们经常需要对Pandas DataFrame中的多个列执行一系列算术运算。当这些运算模式相似且涉及多个目标列时,寻找一种简洁高效的方法至关重要。本教程将详细介绍两种实现这一目标的策略:使用DataFrame.eval()进行多行表达式求值,以及利用Pandas的向量化方法add()和sub()。

1. 数据准备

首先,我们创建一个示例DataFrame,作为后续操作的基础。

import pandas as pddata = {  "A": [42, 38, 39, 23],  "B": [45, 30, 15, 65],  "C": [60, 50, 25, 43],  "D": [12, 70, 35, 76],  "E": [87, 90, 45, 43],  "F": [40, 48, 55, 76],  "G": [58, 42, 85, 10],}df = pd.DataFrame(data)print("原始DataFrame:")print(df)

我们的目标是针对列 C, D, E,执行相同的运算逻辑:目标列 = 目标列 – B + A。

2. 方法一:使用 DataFrame.eval() 进行多行表达式求值

DataFrame.eval() 方法允许用户以字符串形式传递表达式,Pandas 会在 DataFrame 的上下文中对这些表达式进行求值。对于需要对多个列执行相同或相似操作的场景,eval() 特别有用,因为它支持多行表达式,从而提高了代码的清晰度。

df_eval = df.copy() # 创建副本,避免修改原始dfdf_eval = df_eval.eval('''C = C - B + AD = D - B + AE = E - B + A''')print("n使用 eval() 后的DataFrame:")print(df_eval)

优点:

可读性强: 表达式直接反映了数学逻辑,易于理解。简洁: 可以在一个方法调用中处理多个列的更新。性能: 对于大型DataFrame,eval() 通常比纯Python循环更快,因为它在C层级进行优化。

注意事项:

表达式字符串需要严格遵循Python语法,且只能引用DataFrame中的列名。eval() 默认会修改DataFrame的副本并返回,如果需要原地修改,可以考虑inplace=True参数(但通常不推荐,因为会使链式操作复杂化)。

3. 方法二:使用向量化操作 add() 和 sub()

Pandas 提供了高度优化的向量化方法,如 add()、sub()、mul()、div() 等,它们能够对整个 Series 或 DataFrame 执行元素级的运算,而无需显式循环。对于本例中的模式 目标列 = 目标列 – B + A,我们可以将其分解为 目标列 = 目标列 + (A – B)。

df_vec = df.copy() # 创建副本# 首先计算 (A - B) 的结果,这是一个 Seriesintermediate_result = df_vec['A'].sub(df_vec['B'])# 然后将这个 Series 加到目标列 C, D, E 上# 注意:当将一个 Series 加到一个 DataFrame 的子集时,# Pandas 会根据索引对齐,并广播 Series 的值到每一行。# 明确指定 axis=0 确保按行进行操作(即 Series 的每个值对应 DataFrame 的一行)df_vec[['C', 'D', 'E']] = df_vec[['C', 'D', 'E']].add(intermediate_result, axis=0)print("n使用向量化操作后的DataFrame:")print(df_vec)

优点:

极致性能: Pandas 的核心优势之一,这些方法在底层C/Cython实现,速度非常快,尤其适用于大型数据集。Pandas 惯用法: 这种链式调用和向量化思维是Pandas数据处理的推荐方式。灵活性: 可以通过 axis 参数控制操作的方向(行或列)。

注意事项:

理解 axis 参数对于正确执行操作至关重要。axis=0 表示按行操作(或沿索引方向),axis=1 表示按列操作(或沿列方向)。当操作涉及不同维度的数据(如 DataFrame 和 Series)时,Pandas 会尝试进行对齐和广播。确保这种行为符合预期。

4. 结果验证

无论是使用 eval() 还是向量化方法,最终的输出结果都应该是一致的:

    A   B   C   D   E   F   G0  42  45  57   9  84  40  581  38  30  58  78  98  48  422  39  15  49  59  69  55  853  23  65   1  34   1  76  10

可以看到,列 C, D, E 都按照 目标列 = 目标列 – B + A 的逻辑进行了更新。

5. 总结与最佳实践

在Pandas DataFrame中对多列执行批量算术运算时,DataFrame.eval() 和链式向量化方法都是强大的工具

选择 eval() 的场景:当表达式逻辑复杂,且涉及多个列的更新时,eval() 的多行字符串形式能提供更好的可读性。当表达式可以直接引用DataFrame中的列名,并且表达式本身比较长或包含多个中间步骤时。选择向量化操作的场景:当操作模式相对简单,可以分解为一系列 add(), sub(), mul() 等方法链式调用时。追求极致性能,并且熟悉Pandas的向量化操作原理时。当需要更细粒度地控制对齐和广播行为时。

在实际开发中,通常会根据具体情况和团队的代码风格偏好来选择。对于大多数日常任务,两种方法都能提供高效且可读的解决方案。建议优先考虑向量化操作,因为它更符合Pandas的设计哲学,并且在性能上通常表现更优。然而,对于涉及大量临时变量或复杂条件逻辑的表达式,eval() 的简洁性可能更具吸引力。

以上就是使用Pandas DataFrame高效执行多列算术运算的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1382470.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
macOS环境下Python虚拟环境安装mysqlclient的完整指南
上一篇 2025年12月14日 23:56:39
深入理解Python列表元素与内存抽象
下一篇 2025年12月14日 23:56:57

相关推荐

  • CRM无法使用谷歌地图原因_问题诊断与解决策略

    首先检查谷歌地图API密钥配置是否正确,确认权限设置是否允许访问相关服务,若无误则排查CRM系统兼容性问题并尝试更新或联系技术支持。 CRM无法使用谷歌地图,通常是因为API密钥配置错误、权限问题、或者CRM系统与谷歌地图API之间的兼容性问题。解决办法包括检查API密钥、确认权限设置、更新CRM系…

    2026年8月29日
    000
  • MME-CoT— 港中文等机构推出评估视觉推理能力的基准框架

    mme-cot:大型多模态模型链式思维推理能力评估基准 MME-CoT是由香港中文大学(深圳)、香港中文大学、字节跳动、南京大学、上海人工智能实验室、宾夕法尼亚大学和清华大学等机构联合研发的基准测试框架,用于评估大型多模态模型(LMMs)的链式思维(Chain-of-Thought, CoT)推理能…

    2026年8月29日
    000
  • win8开机黑屏只有鼠标 Win8开机后黑屏只显示鼠标指针解决方法

    如果您成功登录Windows 8系统,但桌面无法正常显示,仅能看到鼠标指针在屏幕上移动,这通常意味着Windows资源管理器(Explorer.exe)未能正确启动或已崩溃。以下是解决此问题的步骤: 本文运行环境:联想ThinkPad E14,Windows 8.1。 一、重启Windows资源管理…

    2026年8月29日
    000
  • 小红书比特指纹浏览器是什么 社交平台专用浏览器功能解析

    比特指纹浏览器通过为每个账号生成独立的数字指纹和IP地址,实现多账号环境隔离,有效规避小红书等平台的账号关联与封禁风险。它深度伪装浏览器指纹(如User-Agent、Canvas、WebGL、字体、时区、屏幕分辨率等),结合代理IP和数据隔离技术,使每个账号看似来自不同设备和用户,解决多账号运营中的…

    2026年8月29日
    300
  • win10怎么查看硬盘是固态还是机械_win10硬盘类型检测与分辨方法

    1、通过任务管理器可快速识别硬盘类型,显示“固态硬盘”为SSD,“硬盘驱动器”为HDD;2、使用优化驱动器工具查看“媒体类型”列判断;3、设备管理器中根据硬盘型号含“SSD”等关键词识别;4、PowerShell执行Get-PhysicalDisk命令,MediaType字段显示SSD或HDD。 如…

    2026年8月29日
    000
  • LINUX如何创建一个指定大小的文件_LINUX快速创建指定大小文件方法

    使用dd命令是Linux中创建指定大小文件最常用方法,如dd if=/dev/zero of=largefile bs=1M count=500可创建500MB文件;bs支持b、K、M、G等单位;若无需真实写入,可用truncate -s 1G创建稀疏文件或fallocate -l 500M预分配空…

    2026年8月29日
    000
  • GoogleBard现在叫什么_GoogleBard更名为Gemini详情介绍

    Google将Bard更名为Gemini,标志着其AI战略的全面升级。1. 品牌统一:以Gemini命名核心对话产品,消除用户对技术与产品名混淆的认知障碍;2. 技术整合:底层全面采用Gemini系列模型,从Gemini Nano、Pro到Ultra 1.0,构建覆盖全场景的AI生态;3. 多模态强…

    2026年8月29日
    100
  • 微软 Xbox 用 AI 制作招聘广告现低级错误:代码出现在显示器背面

    7 月 15 日消息,在全面推动人工智能(ai)战略的进程中,微软再次因一则由 ai 制作的招聘广告引发公众争议。近日,微软 xbox 图形团队在 linkedin 上发布了一则招聘信息,本意是招募图形驱动开发与游戏视觉优化方面的工程师,但其中出现的一个低级错误——“电脑屏幕倒装”,却招致了外界广泛…

    2026年8月29日
    000
  • thinkpad think book主要区别是什么

    ThinkPad和ThinkBook虽同为兄弟笔记本,但定位不同。ThinkPad专注高端商务,稳定可靠,追求极致性能,价格高昂,如同深度优化的算法。ThinkBook主打性价比和时尚,功能强大,易于上手,价格亲民,类似封装良好的库。选择ThinkPad还是ThinkBook取决于您的需求和预算。 …

    用户投稿 2026年8月29日
    000
  • think book thinkpad区别是啥

    ThinkBook和ThinkPad定位不同:ThinkPad主打专业商务,ThinkBook针对大众市场。具体差异体现在硬件配置(ThinkPad更高端)、做工设计(ThinkPad更坚固耐用)、软件和服务(ThinkPad更专业)。考虑预算和需求选择:ThinkPad适合对性能、稳定、安全性要求…

    2026年8月29日
    000
  • 123网盘上传文件速度慢怎么解决_123网盘文件上传加速技巧

    123网盘上传慢可通过优化网络和工具解决。首先确保稳定有线连接,关闭占用带宽的应用,重启路由器提升网络质量;其次使用官方PC客户端或支持多线程的第三方工具,利用多线程上传提高效率;再者避开晚高峰,在网络空闲时段上传大文件;最后将多个小文件打包压缩后再上传,减少连接开销,避免上传受限文件类型。 123…

    2026年8月29日
    100
  • Win10系统如何创建U盘安装介质?

    Win10系统如何创建U盘安装介质?Win10系统如何创建U盘安装介质?Win10系统如何创建U盘安装介质?Win10系统如何创建U盘安装介质?

    windows 10 系统支持直接在线升级,但在升级期间可能会遇到一些问题。为此,微软官方推出了一个名为 mediacreationtool 的工具,用户可以通过它来升级 windows 10 或为其他设备制作 u 盘安装介质。接下来,我们将详细介绍如何利用这个工具创建 windows 10 系统的…

    2026年8月29日 用户投稿
    500
  • 电脑提示内存不足怎么清理 快速解决内存问题

    电脑提示内存不足怎么清理 快速解决内存问题电脑提示内存不足怎么清理 快速解决内存问题电脑提示内存不足怎么清理 快速解决内存问题电脑提示内存不足怎么清理 快速解决内存问题

    许多人可能都遇到过“内存不足”的提示,尤其是在同时运行多个程序或使用大型软件时。出现这一问题的原因可能是电脑的物理内存(ram)不够,也可能是虚拟内存设置不合理。无论是哪种情况,都可以通过一些有效的方法来清理和优化内存,让电脑重新恢复流畅运行。 一、检查并关闭占用资源过多的程序 当系统提示内存不足时…

    2026年8月29日 用户投稿
    000
  • 贝壳找房怎么联系房东_贝壳找房直接联系房东方法详解

    通过贝壳找房筛选“个人房源”并查看“房东直租”标签提高联系真房东几率;2. 沟通时主动询问是否业主本人,要求提供房产证或合同信息核实身份;3. 结合实地走访,向物业打听房屋出租情况以验证线上信息真实性;4. 使用平台私信功能沟通,避免过早泄露手机号,观察回复细节并要求签约前查验身份证和房产证明原件。…

    2026年8月29日
    300
  • 如何解决Symfony依赖注入测试中的复杂性?使用matthiasnoback/symfony-dependency-injection-test可以!

    可以通过以下地址学习composer:学习地址 在开发symfony应用时,依赖注入是核心功能之一,但测试这些依赖注入配置和编译器传递的复杂性常常令人头疼。我曾在一个项目中遇到了这样的问题,测试容器扩展和编译器传递的正确性花费了大量时间和精力。幸运的是,通过使用matthiasnoback/symf…

    用户投稿 2026年8月29日
    300
  • PyGraphviz 安装使用

    在 windows 系统下,安装和使用 pygraphviz 的详细步骤如下: 安装 Python:选择 Python 版本并下载安装包,这里以 Python 3.4.4 的 msi 格式文件为例。访问 Python 下载页面进行下载。安装 Python 后,确保将 Python 安装目录添加到系统…

    2026年8月29日
    000
  • 酷睿i7和i5的区别 两者哪个好介绍

    酷睿i7和i5的区别 两者哪个好介绍酷睿i7和i5的区别 两者哪个好介绍酷睿i7和i5的区别 两者哪个好介绍酷睿i7和i5的区别 两者哪个好介绍

    电脑处理器选购时,不少用户都会在intel酷睿i5与i7之间陷入纠结。作为消费级市场中高端定位的两大主力系列,这两款处理器在性能表现、价格区间以及适用场景上各有特点。那么,i7和i5究竟有何不同?哪一款更契合你的需求?本文将从核心参数、实际表现、使用场景及性价比四个维度进行深入剖析。 一、酷睿i5与…

    2026年8月29日 用户投稿
    000
  • regard as和think of as区别是什么

    regard as 和 think of as 皆意为“视作”,区别在于视角和正式程度。regard as 较为正式,强调客观判断,常用于学术论文等。think of as 偏口语化,强调主观感受,适用于非正式对话或写作。可通过代码模拟这种视角差异,regard_as 模拟系统判断,而 think_…

    2026年8月29日
    100
  • R 语言 download.file 的几点知识

    R 语言 download.file 的几点知识R 语言 download.file 的几点知识R 语言 download.file 的几点知识R 语言 download.file 的几点知识

    在 r 语言中,无论是安装包还是下载数据, download.file 函数都是一个常用的工具。如果你在使用过程中遇到中断或异常,了解 download.file 函数的详细信息将有助于你判断问题是出在远程源服务器、自身服务器还是网络故障上,甚至可以帮助你找到替代的下载方法。 上面的链接提供了关于 …

    2026年8月29日 用户投稿
    000
  • MySQL安全配置误区及防范_MySQL安全加固常见问题分析

    MySQL安全配置误区及防范_MySQL安全加固常见问题分析MySQL安全配置误区及防范_MySQL安全加固常见问题分析MySQL安全配置误区及防范_MySQL安全加固常见问题分析MySQL安全配置误区及防范_MySQL安全加固常见问题分析

    mysql安全配置误区在于依赖默认设置、忽视最小权限原则和网络暴露面管理不足。1.清理默认及不必要的账户,如匿名用户和test数据库;2.实施最小权限原则,为每个应用创建专属用户并仅授予必要权限;3.强化密码策略,使用validate_password插件强制复杂密码;4.收紧网络访问控制,限制bi…

    2026年8月29日 用户投稿
    000

发表回复

登录后才能评论
关注微信