如何用Pandas筛选含buu变异且无luu的多变异患者数据
Pandas筛选特定变异患者的解决方案
需求回顾
需要筛选出同时拥有buu变异及其他变异,但不存在luu变异的患者记录。
代码实现
import pandas as pd # 初始化原始DataFrame df = pd.DataFrame({ 'patient': ['patient1', 'patient1', 'patient1','patient2', 'patient2', 'patient3','patient3','patient4'], 'gene':['TYR','TYR','TYR','TYR','TYR','TYR','TYR','TYR'], 'variant': ['buu', 'luu', 'stm','lol', 'bla', 'buu', 'lol','buu'], 'genotype': ['hom', 'het', 'hom','het', 'hom', 'het', 'het','het'] }) # 按患者分组,筛选符合条件的记录 result = df.groupby('patient').filter(lambda group: ('buu' in group['variant'].values) and # 存在buu变异 (group['variant'].nunique() > 1) and # 存在其他非buu变异 ('luu' not in group['variant'].values) # 不存在luu变异 ) print(result)
输出结果
patient gene variant genotype 5 patient3 TYR buu het 6 patient3 TYR lol het
逻辑说明
- 分组:通过
groupby('patient')将数据按患者维度分组,每个组包含该患者的所有变异记录 - 筛选判断:使用
filter()方法对每个分组进行条件校验:- 确认分组内存在
buu变异 - 确认分组内变异类型不止一种(即存在除
buu外的其他变异) - 确认分组内完全没有
luu变异
- 确认分组内存在
- 结果输出:
filter()会自动保留所有符合条件的分组的原始记录,得到目标结果
内容的提问来源于stack exchange,提问作者Manolo Dominguez Becerra
相关产品推荐
相关产品推荐

