Pandas 中基于条件和 Groupby 替换列中的特定字符

pandas 中基于条件和 groupby 替换列中的特定字符

本文介绍了如何使用 Pandas 的 groupby 功能,并结合字符串处理,根据条件替换 DataFrame 列中的特定字符。具体来说,我们将根据 ‘ACCOUNT’ 列进行分组,然后将 ‘ASSET_CLASS’ 列中的 “XX” 替换为递增的两位数字,并根据替换的数字修改资产类别名称,例如将 “FI CHF” 替换为 “FI CHF Gov” 或 “FI CHF Corporate”。此外,还介绍了当一个账户同时拥有 CHF 和 EUR 资产时,如何使用更精细的分组策略来实现相同的替换逻辑。

基于 Groupby 的字符串替换

在 Pandas 中,经常需要根据分组对数据进行转换。本节将演示如何使用 groupby 和字符串操作来替换 DataFrame 中特定列的字符,并根据替换结果修改其他字符串。

示例 DataFrame

首先,我们创建一个示例 DataFrame:

import pandas as pddf = pd.DataFrame({    'ACCOUNT': [1, 1, 2, 2],    'ASSET_CLASS': ['11201XX FI CHF', '11201XX FI CHF',                    '12201XX FI EUR', '12201XX FI EUR',                   ],})print(df)

输出:

   ACCOUNT ASSET_CLASS0        1  11201XX FI CHF1        1  11201XX FI CHF2        2  12201XX FI EUR3        2  12201XX FI EUR

替换 “XX” 并修改资产类别名称

以下代码演示了如何基于 ‘ACCOUNT’ 列进行分组,并将 ‘ASSET_CLASS’ 列中的 “XX” 替换为递增的两位数字,同时修改资产类别名称。

s1 = df.groupby('ACCOUNT').cumcount().add(1).astype('str').str.zfill(2)m = {'01': ' Gov', '02': ' Corporate'}s2 = df['ASSET_CLASS'].str.split('XX')df['ASSET_CLASS'] = s2.str[0] + s1 + s2.str[1] + s1.map(m)print(df)

代码解释:

df.groupby(‘ACCOUNT’).cumcount(): 根据 ‘ACCOUNT’ 列进行分组,并计算每个组内的累计计数。.add(1): 将累计计数加 1,因为我们希望从 1 开始计数。.astype(‘str’).str.zfill(2): 将计数转换为字符串,并使用 zfill(2) 填充前导零,确保所有数字都是两位数。例如,1 变为 “01”,2 变为 “02”。m = {’01’: ‘ Gov’, ’02’: ‘ Corporate’}: 创建一个字典,用于将替换的数字映射到相应的资产类别名称后缀。s2 = df[‘ASSET_CLASS’].str.split(‘XX’): 将 ‘ASSET_CLASS’ 列中的字符串按照 “XX” 分割成两部分。df[‘ASSET_CLASS’] = s2.str[0] + s1 + s2.str[1] + s1.map(m): 将分割后的字符串、替换的数字和资产类别名称后缀拼接在一起,更新 ‘ASSET_CLASS’ 列。

输出:

   ACCOUNT         ASSET_CLASS0        1  1120101 FI CHF Gov1        1  1120102 FI CHF Corporate2        2  1220101 FI EUR Gov3        2  1220102 FI EUR Corporate

处理一个账户拥有多种资产类别的情况

如果一个账户同时拥有多种资产类别(例如 CHF 和 EUR),则需要更精细的分组策略。以下示例演示了如何处理这种情况。

示例 DataFrame

df = pd.DataFrame({    'ACCOUNT': [1, 1, 1, 1, 2, 2],    'ASSET_CLASS': ['11201XX FI CHF', '11201XX FI CHF',                    '12201XX FI EUR', '12201XX FI EUR',                    '12201XX FI EUR', '12201XX FI EUR',                   ],})print(df)

输出:

   ACCOUNT ASSET_CLASS0        1  11201XX FI CHF1        1  11201XX FI CHF2        1  12201XX FI EUR3        1  12201XX FI EUR4        2  12201XX FI EUR5        2  12201XX FI EUR

基于账户和资产类别进行分组

以下代码演示了如何基于 ‘ACCOUNT’ 和资产类别进行分组,并将 ‘ASSET_CLASS’ 列中的 “XX” 替换为递增的两位数字,同时修改资产类别名称。

s1 = df.groupby(['ACCOUNT', df['ASSET_CLASS'].str.split(' ').str[-1]]).cumcount()        .add(1).astype('str').str.zfill(2)m = {'01': ' Gov', '02': ' Corporate'}s2 = df['ASSET_CLASS'].str.split('XX')df['ASSET_CLASS'] = s2.str[0] + s1 + s2.str[1] + s1.map(m)print(df)

代码解释:

df.groupby([‘ACCOUNT’, df[‘ASSET_CLASS’].str.split(‘ ‘).str[-1]]): 根据 ‘ACCOUNT’ 列和 ‘ASSET_CLASS’ 列的最后一个单词(即资产类别)进行分组。df[‘ASSET_CLASS’].str.split(‘ ‘).str[-1] 用于提取资产类别。其余步骤与前面的示例相同,用于计算累计计数、替换 “XX” 和修改资产类别名称。

输出:

   ACCOUNT         ASSET_CLASS0        1  1120101 FI CHF Gov1        1  1120102 FI CHF Corporate2        1  1220101 FI EUR Gov3        1  1220102 FI EUR Corporate4        2  1220101 FI EUR Gov5        2  1220102 FI EUR Corporate

总结

本文介绍了如何使用 Pandas 的 groupby 功能和字符串操作,根据条件替换 DataFrame 列中的特定字符。通过灵活运用 groupby 和字符串处理函数,可以实现各种复杂的数据转换任务。在实际应用中,需要根据具体的数据结构和业务需求选择合适的分组策略和替换逻辑。

以上就是Pandas 中基于条件和 Groupby 替换列中的特定字符的详细内容,更多请关注创想鸟其它相关文章!

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月14日 13:20:24
下一篇 2025年12月14日 13:20:38

相关推荐

  • 解决Selenium启动Chrome浏览器SSL证书验证失败问题

    本文旨在帮助解决在使用Selenium和Python启动Chrome浏览器时遇到的SSL证书验证失败问题。通过分析错误信息,我们发现问题源于无法验证googlechromelabs.github.io的SSL证书。本文将提供一种简单有效的解决方案,利用Selenium Manager自动管理Chro…

    好文分享 2025年12月14日
    000
  • Python怎么使用enumerate获取索引和值_enumerate函数索引与值遍历指南

    使用enumerate函数可同时获取可迭代对象的索引和值,语法为enumerate(iterable, start=0),它比range(len())更简洁、安全且高效,适用于列表、字符串、元组、字典、集合及文件等可迭代对象,并可与zip、列表推导式等结合实现复杂需求,是Python中处理索引遍历的…

    2025年12月14日
    000
  • 解决Selenium Python启动Chrome浏览器SSL证书验证失败问题

    本文旨在帮助解决在使用Selenium和Python启动Chrome浏览器时遇到的SSL证书验证失败问题。通过分析错误堆栈信息,我们发现问题源于webdriver_manager尝试下载ChromeDriver版本信息时无法验证SSL证书。本文将提供一种简便的解决方案,利用Selenium Mana…

    2025年12月14日
    000
  • Pandas:基于条件和 Groupby 替换列中的特定字符

    本文介绍了如何使用 Pandas 库,结合 groupby 函数和字符串操作,根据特定条件替换 DataFrame 列中的字符。通过累积计数和字典映射,能够灵活地修改列中的特定部分,并根据替换值调整相关文本,实现数据清洗和转换的目的。 在数据分析和处理中,经常需要根据特定条件修改 DataFrame…

    2025年12月14日
    000
  • 解决Python Turtle Snake游戏中计数器异常增加的问题

    问题摘要 本文旨在帮助解决使用Python Turtle库开发Snake游戏时,计数器意外增加的问题。通过分析问题代码,找出导致计数器递增两次的原因,并提供修复方案,确保计数器正常工作。本文将重点关注代码中与计数器更新相关的部分,并提供清晰的修改建议。 问题分析与解决 在使用Python的Turtl…

    2025年12月14日
    000
  • 深入理解Django多进程部署下的全局变量行为

    在Django应用通过Gunicorn等WSGI服务器多进程部署时,全局字典等全局变量的行为可能与开发环境不同,导致数据不一致。这是因为每个工作进程都拥有独立的内存空间,全局变量在不同进程间不共享。解决此问题的核心在于避免使用全局变量存储跨请求或跨进程共享的状态,而应采用外部持久化存储机制,如Dja…

    2025年12月14日
    000
  • 解决AutoKeras中One-Hot编码导致精度下降的问题

    本文旨在解决在使用AutoKeras进行结构化数据分类时,使用One-Hot编码作为标签反而导致模型精度下降的问题。通过分析AutoKeras的内部机制,解释了可能的原因,并提供了设置随机种子以确保结果一致性的方法,同时建议增加搜索试验次数以提高模型稳定性。本文还涵盖了如何检查AutoKeras是否…

    2025年12月14日
    000
  • Django中模型Choices字段的动态翻译实践指南

    本文详细介绍了如何在Django项目中,高效地翻译模型Choices字段的动态值。通过利用TextChoices枚举类型和gettext_lazy进行定义,结合模板中的get_FOO_display方法,可以确保模型字段的选项值在多语言环境下得到正确且自动的翻译,从而解决直接在模板中翻译动态变量的挑…

    2025年12月14日
    000
  • Django Gunicorn多Worker模式下全局字典值异常的原理与解决方案

    在Django应用部署于Gunicorn多Worker环境时,全局字典等变量可能出现值不一致的问题。这源于每个Worker进程拥有独立的内存空间,导致全局变量的修改无法在不同Worker间共享。为确保数据在所有Worker间同步,应避免使用全局变量存储共享状态,转而采用如Memcached等缓存系统…

    2025年12月14日
    000
  • 解决Django多进程环境中全局字典不一致性问题

    在Django应用中,全局字典在开发环境正常,但在Gunicorn多worker生产环境下会出现值不一致或重置的问题。这是因为每个Gunicorn worker都是独立的进程,拥有独立的内存空间,导致全局变量无法在进程间共享。为解决此问题,应避免使用全局变量存储共享状态,转而采用Memcached或…

    2025年12月14日
    000
  • Kivy应用开发:正确处理按钮事件中的条件判断失灵问题

    在Kivy应用开发中,处理按钮事件时,开发者常遇到条件判断语句(如if)未能按预期执行的问题。这通常是由于错误地使用按钮的显示文本作为判断依据,而忽略了按钮的实际对象身份。本文将详细解析这一常见陷阱,并提供通过比较按钮对象实例来准确识别事件源的专业解决方案,确保条件逻辑正确触发,提升Kivy应用的稳…

    2025年12月14日
    000
  • Quarto 文档间图表交叉引用:利用 include 实现内容整合

    本文探讨在 Quarto 独立文档中实现跨文件图表交叉引用的方法。由于 Quarto 默认的交叉引用机制仅限于单一编译单元,直接引用外部文件中的标签无法成功。核心解决方案是利用 {{}} 短代码将包含图表定义的 .qmd 文件内容嵌入到主文档中,从而使所有引用标签在渲染时处于同一上下文,实现准确的交…

    2025年12月14日
    000
  • Django中动态模型选择项的国际化与翻译实践

    本文详细介绍了在Django项目中如何正确实现模型动态选择项(如状态字段)的国际化与翻译。核心策略是利用TextChoices定义可翻译的字段标签,并通过gettext_lazy标记字符串,最终在模板中使用get_FOO_display()方法来渲染已翻译的文本,从而解决{% blocktransl…

    2025年12月14日
    000
  • Autokeras中标签编码、随机种子对模型性能的影响及复现性策略

    在使用Autokeras的StructuredDataClassifier时,直接使用One-Hot编码标签与转换为整数标签可能导致显著的性能差异。这种差异并非源于Autokeras对标签处理方式的根本性错误,而是通常与随机种子在模型训练和超参数搜索过程中的影响密切相关。为确保模型性能的稳定性和实验…

    2025年12月14日
    000
  • Python 实战:博客内容管理系统雏形

    该CMS核心功能为文章的增删改查,使用Python操作文件系统实现存储,通过Flask可连接前端界面,后续可优化为数据库存储并添加用户认证与权限管理。 一个简单的博客内容管理系统(CMS)的核心在于提供创建、编辑、存储和展示文章的功能。利用 Python,我们可以快速搭建这样一个系统,虽然只是雏形,…

    2025年12月14日
    000
  • Django 多进程部署下全局变量失效问题解析与解决方案

    在Django应用通过Gunicorn多进程部署时,全局字典等内存变量会在不同工作进程间表现不一致,导致数据失效或错乱。这是因为每个Gunicorn工作进程拥有独立的内存空间。解决此问题的核心在于避免使用进程内的全局变量来存储共享状态,而应采用外部的、可被所有工作进程访问的共享存储机制,如Djang…

    2025年12月14日
    000
  • VS Code Python项目中的环境变量管理:深入理解与实践

    本教程详细探讨了在VS Code中管理Python项目环境变量的多种方法。我们将分析.env文件在不同运行模式下的加载行为,并提供使用python-dotenv库进行显式加载的实用指南,同时介绍调试配置(launch.json)在环境变量设置中的作用,旨在帮助开发者构建更健壮、可移植的Python应…

    2025年12月14日
    000
  • Selenium Edge WebDriver 自动化:有效禁用弹窗通知的策略

    本文旨在解决使用Selenium Edge WebDriver时遇到的弹窗通知干扰自动化脚本的问题。我们将探讨如何通过配置Edge浏览器选项来禁用“功能和工作流推荐”等通知,并提供处理Cookie同意弹窗的策略,确保自动化流程顺畅无阻。 在使用Selenium进行Web自动化测试时,Microsof…

    2025年12月14日
    000
  • 高效配置Selenium在Digital Ocean等无头服务器上进行网页抓取

    本文旨在解决在Digital Ocean等无头服务器环境下运行Selenium脚本时遇到的常见问题,特别是关于DevToolsActivePort file doesn’t exist错误和脚本无响应的情况。文章将详细介绍如何通过正确的Chrome/Chromium配置、必要的启动参数以…

    2025年12月14日
    000
  • 在PySpark中利用数组列与列表交集进行DataFrame过滤的正确姿势

    本文详细介绍了如何在PySpark中高效地过滤DataFrame,当需要根据数组列与一个给定Python列表的交集来筛选数据时。核心解决方案是利用pyspark.sql.functions.arrays_overlap函数,并结合lit函数将Python列表中的元素转换为Spark字面量表达式,从而…

    2025年12月14日
    000

发表回复

登录后才能评论
关注微信