新闻中心
利用Pandas高效提取DataFrame中符合条件的关联数据

本文将深入探讨如何在Pandas DataFrame中高效地执行向量化操作,特别是针对多列数据,根据特定条件筛选并提取关联数据(如患者ID)。通过结合布尔索引和列表推导式,我们将展示如何避免低效的循环,实现高性能的数据处理,从而轻松获取按列分组的条件性数据列表。
Pandas作为Python中强大的数据处理库,其核心优势之一在于提供了丰富的向量化操作,能够显著提升数据处理效率。在实际数据分析场景中,我们经常需要根据DataFrame中某一列或多列的条件,来筛选并提取与之关联的其他列数据。本教程将以一个具体的案例为例,详细介绍如何利用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)在处理这类数据时,一些基础的向量化操作非常常见。例如,我们可以轻松地统计每列中满足特定条件的单元格数量,或者计算满足条件的单元格之和。
-
统计每列中值大于等于0.5的单元格数量:
arr1 = df[columns].ge(0.5).sum().to_numpy() print("\n每列中值>=0.5的单元格数量:", arr1) # 输出示例: 每列中值>=0.5的单元格数量: [7 4 7 5 7]这里,df[columns].ge(0.5) 会生成一个布尔型的DataFrame,表示每个单元格是否大于等于0.5。接着,.sum() 会对每列的布尔值进行求和(True被视为1,False被视为0),从而得到满足条件的数量。
-
计算每列中值大于等于0.5的单元格之和:
小云雀
剪映出品的AI视频和图片创作助手
1949
查看详情
# 注意:为了避免NaN影响求和,此方法会先筛选出符合条件的值再求和 arr2 = df[df[columns] >= 0.5][columns].sum().to_numpy() print("每列中值>=0.5的单元格之和:", arr2) # 输出示例: 每列中值>=0.5的单元格之和: [4.9 3. 5.2 4.1 5.3]此操作通过布尔索引 df[df[columns] >= 0.5] 首先筛选出满足条件的单元格,然后对这些单元格进行求和。未满足条件的单元格在求和时会被忽略(通常表现为NaN,但sum()会跳过NaN)。
按列条件提取关联患者列表
现在,我们面临一个更具体的任务:对
于每一列(S1到S5),我们希望获取所有值大于等于0.5的患者ID列表。例如,对于S1列,如果p1的S1值是0.7(>=0.5),那么p1就应该出现在S1对应的患者列表中。
为了高效地实现这一目标,我们可以利用Pandas的布尔索引和列表推导式。
patient_lists_by_column = [df.Patient[df[col] >= 0.5].to_list() for col in columns]
print("\n按列条件筛选的患者列表:")
for i, col in enumerate(columns):
print(f" {col}: {patient_lists_by_column[i]}")代码解析:
- for col in columns: 这是一个列表推导式,它会遍历我们定义的 columns 列表中的每一个列名('S1', 'S2', ...)。
- df[col] >= 0.5: 在每一次迭代中,这会为当前列 col 生成一个布尔型Series。例如,当 col 是 'S1' 时,它会返回一个Series,指示 df['S1'] 中哪些行的值大于等于0.5。
- df.Patient[...]: 这是Pandas中强大的布尔索引功能。我们将上一步生成的布尔型Series作为索引传递给 df.Patient。Pandas会自动筛选出 df.Patient 列中对应布尔值为 True 的行。
- .to_list(): 最后,将筛选出的 Patient Series 转换为一个标准的Python列表。
输出示例:
按列条件筛选的患者列表: S1: ['p1', 'p3', 'p4', 'p5', 'p7', 'p9'] S2: ['p3', 'p5', 'p7', 'p8'] S3: ['p1', 'p3', 'p4', 'p5', 'p6', 'p7', 'p9'] S4: ['p3', 'p4', 'p5', 'p7', 'p8'] S5: ['p1', 'p2', 'p3', 'p4', 'p5', 'p6', 'p8', 'p9']
注意事项与最佳实践
- 性能优势: 这种结合布尔索引和列表推导式的方法,相比于使用显式 for 循环逐行检查和追加数据,具有显著的性能优势。Pandas的底层实现是C语言编写的,向量化操作能够充分利用CPU的并行计算能力,特别是在处理大规模数据集时,性能提升更为明显。
- 代码可读性: 这种写法简洁明了,易于理解,符合Pythonic的编程风格。它清晰地表达了“对每一列应用条件并提取患者”的意图。
- 灵活性: 布尔索引非常灵活,你可以组合多个条件(例如 (df[col] >= 0.5) & (df[col]
- 输出格式: 如果需要获取唯一的患者ID,可以在 .to_list() 之前或之后使用 set(),例如 [list(set(df.Patient[df[col] >= 0.5])) for col in columns]。如果需要将结果存储为字典,可以将列表推导式的结果与列名结合,例如 dict(zip(columns, patient_lists_by_column))。
总结
本教程展示了如何利用Pandas的向量化能力,特别是布尔索引和列表推导式,来高效地从DataFrame中根据列条件提取关联数据。掌握这些技术不仅能提高代码的执行效率,还能使数据处理逻辑更加清晰和简洁。在处理大规模数据集时,优先考虑使用Pandas提供的向量化操作是实现高性能数据分析的关键。通过灵活运用这些工具,您可以更高效、更优雅地解决各种复杂的数据筛选和提取问题。
以上就是利用Pandas高效提取DataFrame中符合条件的关联数据的详细内容,更多请关注其它相关文章!
# 这一目标
# 外包seo靠谱吗
# 齐齐哈尔优化seo
# 烤鱼营销推广话术大全集
# 数据智能营销推广
# 黄冈网站seo价格表
# 辽阳网站媒体推广
# 哈密高级网站建设设计
# seo推广运营很赚钱吗
# seo拓客引流
# 巨蚁全网营销推广
# 这是
# python
# 如何做
# 它会
# 高性能
# 多个
# 符合条件
# 数据处理
# 单元格
# 布尔
# 代码可读性
# 工具
# c语言
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
Golang如何使用bytes.Split分割字节切片_Golang bytes切片分割方法
iCloud登录入口网页版 苹果iCloud官网登录
Discord Slash 命令响应超时问题的异步解决方案
Win11截图该按哪些键 Win11截屏完整流程解析【教程】
网易大神账号申诉需要多久_网易大神账号申诉流程说明
Win11怎么关闭触摸屏_Windows 11禁用HID符合标准触摸屏
手机CPU怎么影响游戏体验_手机CPU对游戏性能的影响分析
HTML转PPT成品工具有哪些?HTML网页转PPT成品工具大全
腾讯QQ邮箱官方网站_QQ邮箱网页版在线登录
必由学官方登录入口 必由学教师学生账号快速访问
Python大型XML文件高效流式解析教程
如何在J*a中使用Locale处理多语言环境
哔哩哔哩忘记密码了怎么找回_哔哩哔哩密码找回方法
铁路12306的积分有效期是多久_铁路12306积分有效期说明
LINUX的perf命令入门_LINUX官方性能分析工具的使用与解读
三星ZFold5多任务卡顿_Samsung ZFold5流畅度提升
mysql如何设置表访问权限_mysql表访问权限配置
J*aScript设计模式实践_j*ascript代码优化
b站怎么删除评论_b站评论管理与删除操作
C++如何进行游戏物理模拟_使用Box2D库为C++游戏添加2D物理效果
高德地图沿途添加点失败如何解决 高德多点规划方法
React项目中导航栏Logo自适应布局:避免裁剪与布局溢出
mcjs网页版在线存档 mcjs云存档登录入口
高德地图公交到站提醒失败如何解决 高德提醒权限设置
React Router 嵌套组件中 URL 重定向问题的解决方案
抖音DOU+怎么投最有效 抖音付费推广的ROI提升技巧
uc浏览器网页版极速入口 uc网页浏览器网页版流畅体验
Win10磁盘清理工具在哪 Win10打开并使用磁盘清理【教程】
Google翻译怎么语音输入_Google翻译语音输入功能使用与设置方法
EMS快递官网app_中国邮政速递物流手机客户端
qq音乐在线播放入口_qq音乐电脑版登录链接
铃兰之剑为这和平的世界希里技能组及加点推荐
HTML空白字符处理机制:渲染、DOM与编码实践
Shopware订单对象中获取产品自定义字段的正确方法
QQ邮箱在线登录平台 QQ邮箱个人邮箱网页版入口
微博网页版主页入口 微博官方网站免登录访问
创客贴用户入口官网登录 创客贴网页版电脑版系统
J*aScript生成器_j*ascript异步迭代
葱吃多了会怎样 葱吃多了会伤胃吗
C++如何实现异步操作_C++11使用std::future和std::async进行异步编程
163邮箱官方主页登录 直达网易邮箱登录核心页面
J*aScript中高效清空DOM列表元素:解决for循环中断与任务管理问题
Win10自动更新怎么关闭 Win10永久关闭系统更新的两种方法【终极版】
msn官网入口地址手机版 msn官方网站手机最新链接
QQ网页版官方账号入口 QQ网页版网页版登录指南
win11如何加载ICC颜色配置文件 Win11校色文件安装与显示器色彩管理【指南】
漫蛙漫画登录站点 漫蛙2正版漫画快速访问
如何使用Go和Martini动态服务解码后的图片
AO3最新可访问网址 Archive of Our Own官方在线入口
移动端XML文件怎么转换成Excel 手机和平板上的解决方案


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