新闻中心

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

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

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 CA.LA

第一款时尚产品在线设计平台,服装设计系统

CA.LA 94 查看详情 CA.LA
[['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)

代码解析:

  1. for col in columns: 这是一个列表推导式的外部循环,它会遍历columns列表中定义的每一列('S1', 'S2', ... 'S5')。
  2. df[col] >= 0.5: 在每次循环中,这会为当前列col生成一个布尔Series。Series中的每个元素都是True或False,表示对应行在该列的值是否大于或等于0.5。
  3. df.Patient[...]: 这是Pandas的布尔索引机制。我们将上一步生成的布尔Series作为索引传递给df.Patient。Pandas会选择df.Patient Series中对应布尔值为True的所有元素,即符合条件的患者ID。
  4. .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执行并处理错误 

搜索