如何不拼接列筛选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
相关产品推荐
相关产品推荐

