Pandas DataFrame 中基于条件生成新列的教程

聖光之護
发布: 2025-10-20 15:17:01
原创
603人浏览过

pandas dataframe 中基于条件生成新列的教程

本文介绍了如何基于 Pandas DataFrame 中现有列的值,根据特定条件创建新列。我们将探讨使用 apply 方法和匿名函数,以避免直接使用三元运算符可能遇到的问题,并提供清晰的代码示例和解释,帮助你高效地处理字符串数据。

在 Pandas DataFrame 中,经常需要根据现有列的值创建新的列。例如,根据合同编号的格式,提取特定的信息。本文将介绍如何使用条件语句和 Pandas 的字符串处理函数来实现这一目标。

问题描述

假设我们有一个包含客户合同编号(Client Contract Number)的 DataFrame。我们的目标是创建一个新的列(Search Text),其值取决于合同编号是否包含下划线 (_)。如果包含下划线,则新列的值为下划线之前的所有字符;否则,新列的值为删除所有短划线 (-) 后的完整合同编号。

示例数据

假设我们的 DataFrame 包含以下数据:

| Client Contract Number | |---|---| | 123_2-31 | | 23-1415 | | 124-5_259 | | 1234 |

我们期望得到以下结果:

| Search Text | |---|---| | 123 | | 231415 | | 1245 | | 1234 |

解决方案

同徽B2B电子商务软件 V46
同徽B2B电子商务软件 V46

同徽B2B电子商务软件是国内第一个基于J2EE架构的电子商务商业程序,在国内同类软件中市场占有率位居第一。目前客户分布二十多个省份,三十几个行业,直接和间接服务500万企业,其中包括多家部级单位和世界500强企业:商务部、农业部、德赛集团、宝钢集团、江苏龙华集团、深圳中农股份、中集集团等。 。 网站参数管理运营商可对整个网站进行灵活的配置,适应不同的运营需求网站更新将信息生成静态页面,加快浏览速

同徽B2B电子商务软件 V46 0
查看详情 同徽B2B电子商务软件 V46

直接使用 Pandas Series 的 str.contains() 方法进行条件判断,并结合三元运算符可能会遇到 ValueError: The truth value of a Series is ambiguous 错误。这是因为 Pandas 无法直接将 Series 的真值用于条件判断。

为了解决这个问题,我们可以使用 apply 方法和匿名函数(lambda 函数)来逐行处理 DataFrame。

代码示例

import pandas as pd

# 创建示例 DataFrame
data = {"Client Contract Number": ["123_2-31", "23-1415", "124-5_259", "1234"] }
raw_data_df = pd.DataFrame(data)

# 首先,移除所有短划线
raw_data_df['Search Text'] = raw_data_df['Client Contract Number'].str.replace('-', '')

# 然后,使用 apply 方法和匿名函数进行条件判断
raw_data_df["Search Text"] = raw_data_df["Search Text"].apply(lambda x: x.split("_")[0] if "_" in x else x)

# 打印结果
print(raw_data_df)
登录后复制

代码解释

  1. 移除短划线: raw_data_df['Search Text'] = raw_data_df['Client Contract Number'].str.replace('-', '') 首先创建一个新的列 Search Text,并将 Client Contract Number 列中的所有短划线替换为空字符串。
  2. 使用 apply 方法和匿名函数:
    • raw_data_df["Search Text"].apply(lambda x: ...) 将 apply 方法应用于 Search Text 列,对每一行数据执行匿名函数。
    • lambda x: x.split("_")[0] if "_" in x else x 定义了一个匿名函数,该函数接受一个参数 x(即每一行的 Search Text 值)。
    • if "_" in x else x 判断 x 是否包含下划线。
      • 如果包含下划线,则使用 x.split("_")[0] 将字符串按 _ 分割,并取第一个元素(即下划线之前的部分)。
      • 如果不包含下划线,则直接返回 x(即删除短划线后的完整合同编号)。

注意事项

  • apply 方法虽然灵活,但在处理大型 DataFrame 时可能会比较慢。如果性能是关键,可以考虑使用 np.where 或 pd.Series.mask 等向量化操作。
  • 确保理解匿名函数中的条件判断逻辑,以适应不同的数据处理需求。
  • 在实际应用中,可能需要根据数据的具体格式进行适当的调整。

总结

本文介绍了如何使用 Pandas 的 apply 方法和匿名函数,基于条件生成新的列。这种方法可以有效地处理字符串数据,并避免直接使用三元运算符可能遇到的问题。通过理解代码示例和注意事项,你可以灵活地应用于各种数据处理场景。

以上就是Pandas DataFrame 中基于条件生成新列的教程的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号