本文介绍了如何利用 Pandas DataFrame 的向量化操作,高效地获取每列中数值大于等于 0.5 的患者列表。通过列表推导式和布尔索引,避免了显式循环,提高了代码的执行效率和可读性。掌握这些技巧,可以更便捷地进行数据分析和处理。
在数据分析中,经常需要根据DataFrame中特定列的值来筛选或提取相关信息。Pandas 提供了强大的向量化操作,可以避免使用循环,从而提高效率。本文将介绍如何使用向量化操作,从DataFrame中获取每列满足特定条件的患者列表。
核心思路
核心思路是利用Pandas的布尔索引和列表推导式。首先,使用布尔索引筛选出每列中大于等于 0.5 的行。然后,从筛选后的行中提取对应的患者 ID。最后,使用列表推导式对所有列重复此操作,生成一个包含所有列的患者列表的列表。
具体步骤
首先,创建一个示例 DataFrame,包含患者 ID 和一些数值列:
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(df)
使用列表推导式,对每一列执行以下操作:
patient_lists = [df.Patient[df[col] >= 0.5].to_list() for col in columns] print(patient_lists)
patient_lists 将是一个包含多个列表的列表,每个列表对应 DataFrame 的一列,包含该列中数值大于等于 0.5 的患者 ID。
[['p1', 'p3', 'p4', 'p5', 'p7', 'p9'], ['p3', 'p5', 'p7', 'p8'], ['p1', 'p3', 'p4', 'p5', 'p6', 'p7', 'p9'], ['p3', 'p4', 'p5', 'p7', 'p8'], ['p1', 'p2', 'p3', 'p4', 'p5', 'p6', 'p9', 'p8']]
注意事项
总结
通过使用 Pandas 的向量化操作,可以高效地从 DataFrame 中提取满足条件的患者列表。这种方法避免了显式循环,提高了代码的执行效率和可读性。掌握这些技巧,可以更便捷地进行数据分析和处理。