讲师中心 微信公众号
AI工具推荐 视频效率加速

Pandas DataFrame向量化操作:按列条件筛选与患者列表提取

小丽君_2945

小丽君_2945

发布时间:2025-11-17 14:18:07

|

278人浏览过

|

来源于php中文网

原创

Pandas DataFrame向量化操作:按列条件筛选与患者列表提取

本文探讨如何在pandas dataframe中高效执行向量化操作,特别关注如何根据每列的特定数值条件,筛选并生成对应的患者id列表。通过结合布尔索引和列表推导式,我们将展示一种简洁且高性能的方法,以避免低效的循环,从而优化数据处理流程。

引言:Pandas向量化操作的重要性

在数据分析和处理中,效率是关键。Pandas作为Python数据科学的核心库,其设计哲学之一就是通过向量化操作来提高性能。向量化操作是指对整个数组或Series执行操作,而不是使用显式的Python循环逐个元素处理。这得益于Pandas底层使用NumPy和C语言实现,能够显著加快大数据集的处理速度。理解并有效利用向量化操作,是编写高性能Pandas代码的基础。

数据准备与基本向量化示例

首先,我们创建一个示例DataFrame,其中包含患者ID和多个测量值列(S1到S5)。

import pandas as pd

columns = ['S1', 'S2', 'S3', 'S4', 'S5']

df = pd.DataFrame({'Patient':['p1', 'p2', 'p3', 'p4', 'p5', 'p6', 'p7', 'p8', 'p9', 'p10'],
                   'S1':[0.7, 0.3, 0.5, 0.8, 0.9, 0.1, 0.9, 0.2, 0.6, 0.3],
                   'S2':[0.2, 0.3, 0.5, 0.4, 0.9, 0.1, 0.9, 0.7, 0.4, 0.3],
                   'S3':[0.6, 0.3, 0.5, 0.8, 0.9, 0.8, 0.9, 0.3, 0.6, 0.3],
                   'S4':[0.2, 0.3, 0.7, 0.8, 0.9, 0.1, 0.9, 0.7, 0.3, 0.3 ],
                   'S5':[0.9, 0.8, 0.5, 0.8, 0.9, 0.7, 0.2, 0.7, 0.6, 0.3 ]})

print("原始DataFrame:")
print(df)

Pandas提供了丰富的向量化方法。例如,我们可以轻松地统计每列中值大于等于0.5的单元格数量,或者计算这些满足条件的单元格的总和:

# 获取每列中值 >= 0.5 的单元格数量
arr1 = df[columns].ge(0.5).sum().to_numpy()
print("\n每列中值 >= 0.5 的单元格数量:")
print(arr1)

# 获取每列中值 >= 0.5 的单元格总和
# 注意:这里对不满足条件的单元格会是 NaN,sum() 会自动跳过 NaN
arr2 = df[df[columns]>=0.5][columns].sum().to_numpy()
print("\n每列中值 >= 0.5 的单元格总和:")
print(arr2)

上述操作展示了Pandas如何通过链式调用(如 ge().sum())和布尔索引 (df[df[columns]>=0.5]) 来高效地处理数据,而无需编写显式循环。

核心问题:按列条件筛选患者列表

现在,我们的目标是针对DataFrame中的每一列(S1, S2, S3, S4, S5),找出所有测量值大于等于0.5的患者ID,并将这些ID收集成一个列表。最终的输出将是一个包含多个列表的列表,每个内部列表对应一列的筛选结果。

Forge — Python Developer
Forge — Python Developer

Python开发助手 — 自动化脚本、API封装、命令行工具、数据管道、网页爬虫。经过测试的代码,包含错误处理和文档。当你需要...

下载

例如,对于S1列,我们需要找到其值 >= 0.5 的所有患者,如 ['p1', 'p3', 'p4', 'p5', 'p7', 'p9']。

解决方案:结合布尔索引与列表推导式

解决此问题的最简洁且高效的方法是结合Pandas的布尔索引和Python的列表推导式。这种方法避免了在Python层面进行低效的行迭代,而是充分利用了Pandas的向量化能力。

# 使用列表推导式和布尔索引按列筛选患者ID
patient_lists_by_column = [df.Patient[df[col] >= 0.5].to_list() for col in columns]

print("\n按列条件筛选的患者ID列表:")
print(patient_lists_by_column)

代码解析:

  1. for col in columns: 这是一个列表推导式的核心,它会遍历预定义的 columns 列表中的每一个列名('S1', 'S2', ...)。
  2. df[col] >= 0.5: 在每次迭代中,这会针对当前列 col 生成一个布尔Series。例如,当 col 是 'S1' 时,它会返回一个Series,指示 df['S1'] 中哪些值大于等于0.5(True)或不满足条件(False)。
  3. df.Patient[...]: 这是Pandas中进行条件选择(布尔索引)的关键。我们将上一步生成的布尔Series作为索引传递给 df.Patient Series。Pandas会根据布尔Series中为 True 的位置,选择 df.Patient 中对应行的值。
  4. .to_list(): 最后,将筛选得到的 Patient Series 转换为一个标准的Python列表。

通过这种方式,我们为每一列独立地执行了高效的筛选操作,并将结果收集到一个列表中。这种方法不仅代码简洁,而且由于Pandas底层对布尔索引的优化,它在处理大型数据集时也能保持出色的性能。

注意事项与最佳实践

  • 避免显式循环迭代行: 在Pandas中,应尽量避免使用 for row in df.itertuples(): 或 for index, row in df.iterrows(): 这样的显式行迭代。这些操作通常比向量化操作慢得多。
  • 优先使用Pandas内置函数: Pandas提供了大量的内置函数和方法(如 apply(), groupby(), 各种数学运算符等),它们都经过优化,应优先于自定义的Python循环。
  • 理解布尔索引: 布尔索引是Pandas中最强大的数据选择机制之一。熟练掌握它对于高效数据处理至关重要。
  • 内存考虑: 对于极大的数据集,如果生成的列表数量非常多或每个列表非常大,需要考虑潜在的内存消耗。然而,对于大多数常见用例,上述方法是高效且内存友好的。

总结

本文详细介绍了如何在Pandas DataFrame中利用向量化操作,特别是结合布尔索引和列表推导式,来高效地根据每列的条件筛选并提取患者ID列表。通过遵循这些最佳实践,开发者可以编写出更简洁、更快速、更易于维护的Pandas代码,从而显著提升数据处理效率。理解并运用向量化思维,是成为一名高效Pandas用户的重要一步。

热门AI工具

更多
豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

相关专题

更多
Python 时间序列分析与预测
Python 时间序列分析与预测

本专题专注讲解 Python 在时间序列数据处理与预测建模中的实战技巧,涵盖时间索引处理、周期性与趋势分解、平稳性检测、ARIMA/SARIMA 模型构建、预测误差评估,以及基于实际业务场景的时间序列项目实操,帮助学习者掌握从数据预处理到模型预测的完整时序分析能力。

320

2025.12.04

Python 数据清洗与预处理实战
Python 数据清洗与预处理实战

本专题系统讲解 Python 在数据清洗与预处理中的核心技术,包括使用 Pandas 进行缺失值处理、异常值检测、数据格式化、特征工程与数据转换,结合 NumPy 高效处理大规模数据。通过实战案例,帮助学习者掌握 如何处理混乱、不完整数据,为后续数据分析与机器学习模型训练打下坚实基础。

252

2026.01.31

Python数据分析与Pandas高级实战
Python数据分析与Pandas高级实战

本专题围绕 Python 数据分析展开,系统讲解 Pandas 的高级用法,包括数据清洗、透视表、时间序列分析以及多表合并与分组操作。通过实战案例,帮助开发者掌握高效处理与分析数据的方法,提高数据处理效率与分析能力。

591

2026.04.13

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

6104

2023.10.24

Go语言中的运算符有哪些
Go语言中的运算符有哪些

Go语言中的运算符有:1、加法运算符;2、减法运算符;3、乘法运算符;4、除法运算符;5、取余运算符;6、比较运算符;7、位运算符;8、按位与运算符;9、按位或运算符;10、按位异或运算符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2984

2024.02.23

php三元运算符用法
php三元运算符用法

本专题整合了php三元运算符相关教程,阅读专题下面的文章了解更多详细内容。

1792

2025.10.17

剧云人物设定与关系管理教程
剧云人物设定与关系管理教程

本专题介绍剧云人物设定与关系管理,讲解角色小传、性格职业、人物目标、背景资料和关系网络的创建及维护方法。

0

2026.10.22

剧云故事大纲与分场规划教程
剧云故事大纲与分场规划教程

本专题讲解剧云梗概与多级大纲功能,覆盖全局、分集、分场结构生成,以及主线冲突、剧情节点和场次顺序调整。

0

2026.10.22

VibeKnow PPT讲解视频教程汇总
VibeKnow PPT讲解视频教程汇总

本专题介绍VibeKnow PPT讲解模式的素材准备、旁白生成、页面节奏、画面呈现与导出设置,适合课程和培训场景。

0

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Uvicorn官方安装与入门手册
Uvicorn官方安装与入门手册

共0课时 | 0人学习

Python uv官方项目管理指南
Python uv官方项目管理指南

共0课时 | 0人学习

Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn