使用 Pandas cummax() 维护序列中的历史最大值

使用 Pandas cummax() 维护序列中的历史最大值

本文将深入探讨如何利用 pandas 库中的 `cummax()` 函数,高效地在 dataframe 中创建一个新列,该列能够追踪并保留序列中迄今为止遇到的最大值。通过一个实际案例,我们将展示 `cummax()` 如何简洁而准确地实现复杂的数据累计最大值保持逻辑,避免手动迭代的繁琐,从而优化数据处理流程。

引言:追踪并维护序列中的历史最大值

在数据分析和处理中,我们经常会遇到需要在一个序列中追踪并保留迄今为止所遇到的最大值(或最小值)的需求。例如,在金融数据分析中,可能需要跟踪股票价格的历史最高点;在性能监控中,可能需要记录系统的峰值负载。这类问题通常要求创建一个新列,其值在遇到更大的新值时更新,否则保持上一个最大值。虽然这类逻辑听起来可能有些复杂,但 Pandas 库提供了一个非常简洁且高效的内置函数来解决它。

数据准备

首先,我们通过一个示例 DataFrame 来阐述这个问题。假设我们有一个包含数值列 a 的 DataFrame,我们希望创建一个新列 c,使其在每个点上都表示 a 列从开始到当前位置的最大值。

import pandas as pddf = pd.DataFrame(    {        'a': [110, 115, 112, 180, 150, 175, 160, 145, 200, 205, 208, 203, 206, 207, 208, 209, 210, 215],        'b': [1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1], # 列 'b' 在本教程中不直接用于计算 'c'    })print("原始 DataFrame:")print(df)

原始 DataFrame 输出:

      a  b0   110  11   115  12   112  03   180  14   150  05   175  16   160  07   145  08   200  19   205  110  208  111  203  012  206  113  207  114  208  115  209  116  210  117  215  1

问题分析与期望结果

原始问题描述中,用户试图通过一个辅助列 b 来标识 a 列的递增趋势,并进一步构思了复杂的“连胜(streak)”概念,希望在连胜结束时保留连胜期间的最大值,直到遇到更大的新值才更新。然而,仔细分析用户提供的期望输出 c 列,可以发现其行为模式实际上与 pandas.Series.cummax() 函数的功能完全一致。也就是说,c 列在任何时刻都存储着 a 列从开始到当前位置所遇到的最大值。

期望输出 c 列的逻辑:

c 的第一个值是 a 的第一个值。对于后续的每一个位置,c 的值是当前 a 的值与前一个 c 的值中的较大者。

例如:

c[0] = a[0] = 110c[1] = max(a[1], c[0]) = max(115, 110) = 115c[2] = max(a[2], c[1]) = max(112, 115) = 115 (因为 112 不大于 115)c[3] = max(a[3], c[2]) = max(180, 115) = 180以此类推…

解决方案:pandas.Series.cummax()

Pandas 库为这种累积计算提供了专门的函数,其中 Series.cummax() 就是用于计算序列累积最大值的函数。它会遍历 Series 中的每个元素,并返回一个新 Series,其中每个位置的值是到该位置为止所有元素的累积最大值。

实现代码:

# 使用 cummax() 计算列 'c'df['c'] = df['a'].cummax()print("n生成 'c' 列后的 DataFrame:")print(df)

输出结果:

      a  b    c0   110  1  1101   115  1  1152   112  0  1153   180  1  1804   150  0  1805   175  1  1806   160  0  1807   145  0  1808   200  1  2009   205  1  20510  208  1  20811  203  0  20812  206  1  20813  207  1  20814  208  1  20815  209  1  20916  210  1  21017  215  1  215

从输出结果可以看出,df[‘c’] = df[‘a’].cummax() 完美地实现了期望的逻辑,即在 a 列中遇到更大的值时更新 c,否则保持当前的最大值。

cummax() 函数详解

pandas.Series.cummax() 是一个强大的函数,它属于 Series 对象的方法,用于执行累积最大值计算。

工作原理:

它从 Series 的第一个元素开始。对于每个元素,它将其与之前所有元素的累积最大值进行比较。如果当前元素大于累积最大值,则累积最大值更新为当前元素的值。否则,累积最大值保持不变。这个累积最大值被记录在新 Series 的对应位置。

参数说明:

axis: 默认为 None。对于 Series,此参数没有意义。对于 DataFrame,可以指定按行或按列计算。skipna: 默认为 True。表示在计算时跳过 NaN(非数字)值。如果设置为 False,则 NaN 值将传播,即如果累积过程中遇到 NaN,则后续结果都将是 NaN。

示例(skipna 参数):

s = pd.Series([1, 3, None, 2, 5])# skipna=True (默认行为)print("skipna=True:")print(s.cummax())# 输出: 0    1.0#       1    3.0#       2    3.0 (None 被跳过,保留前一个最大值)#       3    3.0#       4    5.0#       dtype: float64# skipna=Falseprint("nskipna=False:")print(s.cummax(skipna=False))# 输出: 0    1.0#       1    3.0#       2    NaN (遇到 None 后传播 NaN)#       3    NaN#       4    NaN#       dtype: float64

注意事项与总结

简洁性与效率: cummax() 函数是高度优化的 C 语言实现,比手动编写循环来计算累积最大值要快得多,尤其是在处理大型数据集时。问题澄清: 在实际工作中,有时对问题的描述可能比实际需求更复杂。本案例中,尽管原始问题描述了复杂的“连胜”和 b 列逻辑,但最终期望的 c 列输出却直接对应 cummax() 的功能。因此,理解核心需求并将其映射到 Pandas 的内置功能是高效解决问题的关键。适用场景: cummax() 不仅适用于追踪数值序列的历史最大值,其对应的 cummin() 可用于追踪历史最小值,cumsum() 用于累积和,cumprod() 用于累积乘积。这些函数在时间序列分析、性能指标计算、数据规范化等多种场景下都非常有用。

通过 pandas.Series.cummax(),我们可以以极高的效率和简洁性解决在 DataFrame 中维护历史最大值的问题。掌握这类内置函数是提升 Pandas 数据处理能力的重要一步。

以上就是使用 Pandas cummax() 维护序列中的历史最大值的详细内容,更多请关注创想鸟其它相关文章!

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Pandas DataFrame高效筛选:按列条件提取关联患者列表
上一篇 2025年12月14日 23:21:20
基于LangChain的CSV数据检索增强生成(RAG)问答系统构建指南
下一篇 2025年12月14日 23:21:31

相关推荐

  • 比特币新手教程 比特币交易平台有哪些

    比特币是一种去中心化的数字货币,基于区块链技术实现点对点交易,具有匿名性、有限发行和不可篡改等特点;新手可通过交易所购买,P2P交易获得比特币,常用平台包括Binance、OKX和Huobi;交易流程包括注册账户、实名认证、绑定支付方式、充值法币并下单购买,可选择市价单或限价单;比特币存储方式有交易…

    2026年5月10日
    000
  • Binance交易所2026版安卓下载 币安平台正版App v3.8.8

    币安(binance)是全球领先的数字资产交易平台之一,为用户提供广泛的数字货币交易服务、金融衍生品以及资产管理等功能。币安app以其安全稳定、操作便捷和功能全面的特点,受到了全球数百万用户的信赖。本文将为您提供币安平台正版app v3.8.8的安卓版本下载及安装教程,并详细介绍后续的注册、认证与交…

    2026年5月10日
    000
  • 实时加密深度分析平台盘点?3款开源数据源

    CryptoWatch开源接口提供高频更新的全球交易所深度数据,支持多语言调用与可视化渲染;2. TradingView开源脚本集成Pine Script模板,可自定义订单簿深度分析并设置买卖压力警报;3. OpenBB Terminal支持本地部署,结合命令行拉取加密资产深度数据,实现技术指标叠加…

    2026年5月10日
    000
  • Velas (VLX) 币是什么?VLX 代币用途、特征以及2025年价格预测

    velas 正在获得关注,作为一个设计为快速、可及及可扩展的区块链,特别是针对那些想要熟悉工具而又无需面对通常性能限制的开发者。 Binance币安 欧易OKX ️ Huobi火币️ 建基于Solana框架并完全支持的形状以太坊虚拟机, Velas 将两个强大的世界融合成一个生态系统。 其原生资产 …

    2026年5月10日
    100
  • Symfony框架适合做什么_Symfony框架适用场景与项目类型

    Symfony适用于大型企业级应用、API服务、CMS系统、微服务及高安全需求项目,其模块化架构支持复杂业务、多数据库操作与团队协作,结合API Platform可快速构建RESTful或GraphQL接口,生成标准文档并实现安全认证;基于Twig与Form组件适合定制化内容管理系统,通过Event…

    2026年5月10日
    000
  • 波场(TRX)历年价格走势一览 TRX历史价格K线图2025最新整理

    波场TRX自2017年上市以来经历多轮周期:2017-2018年初从0.002美元涨至0.30美元,受市场投机推动;2018年末至2019年回落并长期盘整于0.01-0.03美元区间;2020-2021年受益DeFi热潮与生态发展,突破0.1美元;2025年价格在0.33美元附近波动后回落,11月触…

    2026年5月10日
    000
  • 以太坊和比特币的区别_主要差异在哪里

    比特币是去中心化电子现金,专注价值存储与转移;以太坊是可编程平台,支持智能合约与去中心化应用,二者在定位、技术与生态上根本不同。 以太坊和比特币:不仅仅是数字资产的差异 当人们谈论加密世界时,比特币和以太坊是两个无法绕开的名字。虽然它们常常被并列提及,但实际上,两者在设计哲学、核心功能和未来愿景上存…

    2026年5月10日
    000
  • 区块链比特币以太坊是什么关系大白话讲解

    很多人对区块链、比特币和以太坊感到困惑,觉得它们是同一个东西。其实,它们三者的关系就像操作系统、第一款软件和应用商店的关系一样。本文将用最简单的大白话,帮你彻底理清它们之间的区别与联系。 一、区块链:一本公开的、不可篡改的“公共账本” 1、想象一下,村里有个公共账本,任何人记账都必须大声喊出来,全村…

    2026年5月10日
    100
  • 美联储撤销对银行加密资产活动监管信号_币圈平台将受益?

    Binance币安 欧易OKX ️ Huobi火币️ 美联储撤销对银行加密资产活动的特别监管,确实为币圈平台创造了更有利的外部环境。这并非意味着完全放任不管,而是将加密业务纳入常规监管框架,降低了银行参与的门槛和顾虑。对于币圈平台而言,这主要体现在几个关键方面。 银行服务可得性有望改善 过去几年,许…

    2026年5月10日
    100
  • 欧易官方iOS版下载_苹果手机欧易APP官方入口

    欧易官方iOS版下载_苹果手机欧易APP官方入口欧易官方iOS版下载_苹果手机欧易APP官方入口欧易官方iOS版下载_苹果手机欧易APP官方入口欧易官方iOS版下载_苹果手机欧易APP官方入口

    想要进入数字资产的世界,选择一个安全可靠的平台至关重要。本文将作为您的向导,详细拆解欧易(okx)交易所从入门到上手的全部流程,包括官方渠道访问、app安全下载安装,以及新用户注册的每一步。跟随本指南,轻松开启您的交易之旅。 第一步:访问欧易OKX官方网站 欧易官方网址: 欧易官方app: 1、请通…

    2026年5月10日 用户投稿
    000
  • 什么是币安人生?如何买入、卖出币安人生操作步骤教程

    币安人生指通过币安平台参与理财项目实现数字资产增值。首先登录账户,进入【资金】-【理财】页面,选择活期或定期产品并点击【申购】,输入金额前需重点关注预期年化收益、计息规则等条款;赎回时进入对应产品详情页,点击【赎回】并输入数量,注意不同产品规则差异及可能的收益损失,确认后资产将退回现货账户。 欧易官…

    2026年5月10日
    000
  • 什么是抢先交易(Front-running)?在DeFi中它是如何发生的,如何防范?

    抢先交易利用信息优势在他人交易前插入交易获利,损害市场公平。其原理是攻击者通过监控区块链内存池,发现大额交易后以更高手续费插入同类交易优先执行,从而操纵价格。在DeFi中常见为“三明治攻击”:攻击者在受害者买入前低价购入资产(前置交易),推高价格后让受害者高价成交,再立即卖出获利(后置交易)。为防范…

    2026年5月10日
    000
  • 什么是Worldcoin (WLD)?是AI革命还是隐私噩梦?WLD未来前景深度剖析

    Worldcoin的核心是通过Orb虹膜扫描实现人格证明,构建全球身份与金融网络。用户验证后获World ID并领取WLD代币,旨在推动Web3发展及未来全民基本收入。其机遇在于可能成为数字身份标准,但面临虹膜数据隐私、中心化控制、监管限制和伦理争议等挑战,发展前景取决于技术与伦理的平衡。 Worl…

    2026年5月10日
    000
  • 美联储暂停新数字美元推进?_对去中心化加密资产的影响解析

    Binance币安 欧易OKX ️ Huobi火币️ 美联储并没有暂停“新数字美元”的推进,因为美国目前尚未正式推出由央行发行的数字美元(CBDC)。近期市场讨论的相关政策变化,主要围绕对银行参与加密货币活动的监管放松,而非直接推进或停止CBDC项目。这些监管转向对去中心化加密资产生态产生了深远影响…

    2026年5月10日
    000
  • Solana基金会主席 Lily 上海演讲:万物皆可代币化

    在 2025 年 10 月 23 日至 27 日举行的第 11 届全球区块链峰会期间,Solana 基金会主席 Lily Liu 在上海区块链国际周上发表了主题演讲,阐述了“万物皆可代币化”的愿景,并分享了 Solana 在全球金融基础设施建设方面的战略布局。 Solana 的愿景:万物皆可代币化 …

    2026年5月10日
    000
  • 使用JavaScript实现动态货币转换:多价格同步更新与避免重复计算的教程

    本教程将指导您如何使用javascript动态地将多个价格转换为不同货币,并同步更新显示。我们将探讨如何从外部api获取汇率、正确选择和更新多个html元素,以及如何通过存储初始值来避免在多次转换中出现累积计算错误,确保价格始终基于原始值进行准确转换。 在现代Web应用中,动态货币转换是一个常见的需…

    2025年12月23日
    300
  • 动态货币汇率转换与多元素更新教程

    本教程详细介绍了如何使用javascript实现动态货币汇率转换,并确保转换结果能正确应用于页面上的多个显示元素。文章着重解决了常见的开发陷阱,如仅更新第一个元素、重复转换导致数值错误等,通过引入`queryselectorall`、存储原始值和优化数据结构,提供了一套健壮且易于维护的解决方案,适用…

    2025年12月23日
    300
  • 动态货币转换:JavaScript实现多价格元素实时更新教程

    本教程详细介绍了如何使用%ignore_a_1%实现网页上多个价格元素的动态货币转换功能。文章将涵盖从api获取汇率、正确选择和管理dom元素、存储初始价格以避免累积转换错误,以及通过事件监听器实时更新显示价格的关键步骤,确保转换逻辑的准确性和可扩展性。 在现代Web应用中,动态显示商品价格并允许用…

    2025年12月23日
    700
  • Django模型中利用save()方法自动计算可用余额

    本文详细阐述了如何在Django模型中,通过覆盖`save()`方法,实现根据现有字段(如`current_balance`和`amount_input`)自动计算并更新派生字段`available_balance`。这种方法确保了数据的一致性,简化了业务逻辑,并为在网页上展示动态余额提供了可靠的后…

    2025年12月23日
    500
  • HTML表单数据加密怎么处理_HTML表单敏感数据前端加密的方法与实现

    前端加密可补充HTTPS,防止敏感数据在用户端被窃取。通过RSA非对称加密、AES动态密钥或哈希处理等方式,在表单提交前对密码等信息加密,结合后端协作实现安全传输,降低中间人攻击与数据泄露风险。 在Web开发中,HTML表单常用于收集用户信息,包括登录凭证、身份证号、银行卡等敏感数据。虽然HTTPS…

    2025年12月23日
    000

发表回复

登录后才能评论
关注微信