是否有Pandas方法可基于另一列值筛选目标客户的全部记录?
优化方案:单步筛选含Intake就诊记录的患者所有数据
可以用两种更简洁高效的方法直接在原DataFrame上完成筛选,避免额外创建列表和映射操作:
方法1:使用isin直接筛选
这是最直观的单步写法,直接利用布尔索引完成:
df_filtered = df[df['ClientID'].isin(df.loc[df['VisitType'] == 'Intake', 'ClientID'])]
方法2:使用groupby + transform(更高效,适合大数据集)
当数据量较大时,这种方法性能更优,通过分组后检查每个组是否包含Intake生成掩码:
df_filtered = df[df.groupby('ClientID')['VisitType'].transform(lambda x: 'Intake' in x.values)]
优势说明
- 无需额外创建
newPatientList列表和mask映射,代码更简洁 - 方法2避免了
isin的全局查找,分组后局部检查的效率更高,尤其适合ClientID数量较多的场景 - 两种方法都直接在原DataFrame上操作,减少中间变量占用
运行任意一种代码后,都会得到你期望的输出结果:
| ClientID | VisitType |
|---|---|
| 2 | Intake |
| 2 | Regular Session |
| 3 | Intake |
| 3 | Regular Session |
| 3 | Regular Session |
内容的提问来源于stack exchange,提问作者Yisroel Len
相关产品推荐
相关产品推荐

