
本文将深入探讨如何在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的单元格之和:
# 注意:为了避免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]}")代码解析:
输出示例:
按列条件筛选的患者列表: 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']
本教程展示了如何利用Pandas的向量化能力,特别是布尔索引和列表推导式,来高效地从DataFrame中根据列条件提取关联数据。掌握这些技术不仅能提高代码的执行效率,还能使数据处理逻辑更加清晰和简洁。在处理大规模数据集时,优先考虑使用Pandas提供的向量化操作是实现高性能数据分析的关键。通过灵活运用这些工具,您可以更高效、更优雅地解决各种复杂的数据筛选和提取问题。
以上就是利用Pandas高效提取DataFrame中符合条件的关联数据的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号