新闻中心
Pandas DataFrame高效筛选:按列条件提取关联患者列表

本文将深入探讨如何在pandas dataframe中高效地执行向量化操作,特别关注如何根据列的特定条件筛选数据,并提取与之关联的非表格化信息,例如患者id列表。我们将通过实例演示如何结合向量化过滤和列表推导式,以优化性能并获取结构清晰的结果。
Pandas中的向量化操作简介
Pandas作为Python数据分析的核心库,其强大的向量化能力是实现高性能数据处理的关键。向量化操作允许我们对整个Series或DataFrame进行元素级别的操作,而无需编写显式的Python循环,从而显著提高执行效率。
我们首先创建一个示例DataFrame来演示:
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)基于此DataFrame,我们可以轻松执行一些基本的向量化聚合操作。例如,计算每列中值大于或等于0.5的单元格数量,以及这些单元格的总和:
# 获取每列中值 >= 0.5 的单元格数量
arr1 = df[columns].ge(0.5).sum().to_numpy()
print("\n每列中值 >= 0.5 的单元格数量:")
print(arr1)
# 获取每列中值 >= 0.5 的单元格总和
# 注意:这里先筛选出符合条件的单元格,不符合的会变为NaN,然后对NaN求和会忽略NaN
arr2 = df[df[columns]>=0.5][columns].sum().to_numpy()
print("\n每列中值 >= 0.5 的单元格总和:")
print(arr2)按列条件筛选并提取关联数据
上述示例展示了对DataFrame进行聚合计算的向量化方法。然而,在某些场景下,我们可能需要根据每列的特定条件,提取与这些条件关联的“行标识符”(例如本例中的Patient ID),并以列表的形式呈现,而不是进行聚合。
例如,我们希望得到一个列表,其中每个元素都是一个子列表,包含特定列中值大于或等于0.5的所有Patient ID。期望的输出格式如下:
CA.LA
第一款时尚产品在线设计平台,服装设计系统
94
查看详情
[['p1', 'p3', 'p4', 'p5', 'p7', 'p9'], ['p3', 'p5', 'p7', 'p8'], ['p1', 'p3', 'p4', 'p5', 'p6', 'p7', 'p9'], (...), (...)]
为了实现这种非表格化的结果,我们可以结合使用列表推导式(List Comprehension)和Pandas的布尔索引。对于每一列,我们首先生成一个布尔Series,然后用它来筛选Patient列,最后将结果转换为列表。
解决方案
# 使用列表推导式按列筛选并提取患者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)代码解析:
- for col in columns: 这是一个列表推导式的外部循环,它会遍历columns列表中定义的每一列('S1', 'S2', ... 'S5')。
- df[col] >= 0.5: 在每次循环中,这会为当前列col生成一个布尔Series。Series中的每个元素都是True或False,表示对应行在该列的值是否大于或等于0.5。
- df.Patient[...]: 这是Pandas的布尔索引机制。我们将上一步生成的布尔Series作为索引传递给df.Patient。Pandas会选择df.Patient Series中对应布尔值为True的所有元素,即符合条件的患者ID。
- .to_list(): 最后,将筛选出的Patient Series转换为一个标准的Python列表。
通过这种方式,我们避免了显式的嵌套循环,利用了Pandas底层的
优化,使得代码既简洁又高效。
注意事项与性能考量
- 非表格化输出: 这种方法特别适用于需要生成非表格化(例如列表的列表、字典等)结果的场景。如果目标是生成一个新的DataFrame,可能需要考虑不同的apply或groupby策略。
- 列表推导式与循环: 尽管列表推导式在语法上包含循环,但它通常比传统的for循环更高效,因为它在C语言级别进行优化。在本例中,列表推导式内部的df.Patient[df[col] >= 0.5]操作是高度向量化的。
- 内存使用: 当DataFrame非常大时,生成大量的中间布尔Series可能会占用一定内存。但对于大多数常见数据集,这种方法是高效且内存友好的。
- 灵活性: 这种模式非常灵活,可以轻松修改筛选条件(例如df[col] = 0.5])。
总结
在Pandas DataFrame中,高效地根据列条件筛选数据并提取关联信息是常见需求。本文演示了如何巧妙地结合Pandas的向量化布尔索引与Python的列表推导式,以简洁、高效的方式实现这一目标。这种方法不仅能够处理聚合计算,还能灵活地生成结构化的非表格化结果,如本例中的患者ID列表,极大地提升了数据处理的效率和代码的可读性。掌握这种模式,将有助于您在数据分析工作中更游刃有余。
以上就是Pandas DataFrame高效筛选:按列条件提取关联患者列表的详细内容,更多请关注其它相关文章!
# 符合条件
# 乐陵免费企业网站建设
# 去哪找网站建设工程
# 海南网站建设大全
# 深圳抖音seo策略分析
# 养老营销推广文案怎么写
# 闪送线下营销推广方式
# 网站优化十大实例分析题
# 网络seo优惠
# 大石桥专业网站优化推广
# 怎样做好关键词排名优化
# 命令行
# python
# 转换为
# 这种方法
# 数据处理
# 我们可以
# 本例
# 都是
# 单元格
# 布尔
# app
# c语言
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
在WordPress中通过REST API获取BasicAuth保护的远程文章
优化LangChain文档加载与ChromaDB集成:解决多文档处理与分块问题
必由学在线入口 必由学网页版快速登录入口
PHP URL参数传递与500错误调试指南
css链接悬停下划线样式如何自定义_使用::after结合content和transition
漫蛙manwa官网登录界面_漫蛙漫画网页版主站入口
谷歌推RCS信息存档功能:公司可监控员工私密信息!
深入理解Go语言中Map值与方法接收器的交互:为什么需要临时变量
AI抖音网页版免费视频入口 AI抖音网页端最新视频实时观看
win11专注助手在哪 Win11免打扰模式设置与自动化规则【指南】
Golang并发任务中错误如何聚合_Golang goroutine error收集方式
深入理解J*a链表中的IPosition接口与使用
抖音未来赚钱的新趋势 2025年值得关注的变现风口分析
MinIO大规模对象列表性能瓶颈深度解析与外部元数据管理策略
Safari浏览器输入栏卡顿如何解决 Safari搜索建议与缓存清理
网站内容防复制粘贴的实现策略与局限性
荣耀Play7T运行卡顿解决_荣耀Play7T性能优化
c++中的const_cast和reinterpret_cast怎么用_c++四种类型转换
《铁拳8》黑皮辣妹新实机:元气满满的18岁少女!
免费抖音短视频入口_抖音网页版短视频免费通道
抖音极速版最新版本 抖音极速版官方下载地址
Go语言中高效处理x-www-form-urlencoded表单数据
怎样使用“本地安全策略”提升Windows安全性_Secpol.msc配置指南【高手】
初次安装JDK时环境变量如何正确配置_J*A_HOME与PATH设置规则讲解
PDO预处理语句中冒号的正确处理:区分SQL函数格式与命名占位符
LINUX的perf命令入门_LINUX官方性能分析工具的使用与解读
J*aScript实现动态背景色下的文本与按钮颜色自适应调整
J*aScript教程:根据元素文本内容动态设置背景色
qq邮箱日历功能怎么用_创建日程与会议邀请的技巧
yandex入口引擎手机版 yandex安卓版下载入口
机构:以往存储涨价周期小米利润率实际上有所改善 能转嫁给消费者等
Python实现多节点属性重叠度分析教程
cad怎么合并重叠的线段_cad清理重复重叠线条的操作方法
CSS布局:解决全屏元素100%尺寸与外边距导致的页面溢出问题
mc.js官网登录入口 mc.js官方登录入口最新版
如何在复杂的电商平台中优雅地管理共享资源并确保正确重定向,使用spryker-shop/resource-share-page模块助你一臂之力
Composer如何处理Git子模块(submodule)依赖_Composer与Git Submodule的对比与选择
Python多线程中正确使用sigwait处理SIGALRM信号
提升Kafka消费者健壮性:会话超时处理与消息处理语义
印象笔记如何设提醒任务防漏执行_印象笔记设提醒任务防漏执行【任务提醒】
文心一言怎样用插件调度API数据_文心一言用插件调度API数据【API调用】
深入理解J*a编译器的兼容性选项:从-source到--release
响应式图片在网页设计中的正确实现方法
在FastAPI中利用lifespan与依赖注入高效管理Redis连接池
css滚动动画效果怎么实现_使用Animate.css滚动触发动画类
Go与Ruby之间实现AES加密互通:CFB模式下的密钥长度匹配策略
163邮箱网页版入口导航平台 163邮箱网页版登录入口官网导航
win11如何加载ICC颜色配置文件 Win11校色文件安装与显示器色彩管理【指南】
QQ邮箱正确登录入口_QQ邮箱官方网站使用地址
J*aScript Promise链中如何正确终止后续.then执行并处理错误


2025-11-21
浏览次数:次
返回列表