You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何不拼接列筛选Pandas DataFrame中任意诊断列含指定值的行

最优简洁实现方案

不需要新增中间拼接列,直接对目标诊断列批量执行匹配后按行判断即可,代码如下:

# 自动匹配所有DX开头的诊断列,任意一列满足匹配规则就保留该行
DF_v1 = DF[DF.filter(regex=r'^DX\d').apply(lambda x: x.str.contains("cold|resp", na=False, case=False)).any(axis=1)]

代码逻辑说明:

  • DF.filter(regex=r'^DX\d') 自动筛选所有以DX+数字命名的诊断列,无需手动枚举DX1/DX2/DX3,后续新增诊断列也无需修改代码
  • 对每列批量执行你原有匹配规则:str.contains("cold|resp", na=False, case=False),保留大小写不敏感、空值忽略的特性
  • any(axis=1) 按行维度判断,只要该行任意一个诊断列满足匹配规则就返回True,直接实现「任意一列包含cold/resp就保留」的需求
  • 运行后会自动排除ID为2的患者,无需额外加过滤逻辑

手动指定列的备选写法

如果你的诊断列命名没有统一规则,可以手动指定要校验的列:

dx_cols = ["DX1", "DX2", "DX3"]
DF_v1 = DF[DF[dx_cols].apply(lambda x: x.str.contains("cold|resp", na=False, case=False)).any(axis=1)]

如果诊断列可能存在非字符串类型的值,可加astype(str)做兼容:

DF_v1 = DF[DF.filter(regex=r'^DX\d').apply(lambda x: x.astype(str).str.contains("cold|resp", na=False, case=False)).any(axis=1)]

内容的提问来源于stack exchange,提问作者Raven

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 10:27:02