问题
我的 Dataframe 的最小可重复示例如下所示
df = pd.DataFrame({'patient': ['patient1', 'patient1', 'patient1','patient2', 'patient2', 'patient3','patient3','patient4','patient4','patient4','patient4'],
'gene':['TYR','TYR','TYR','TYR','TYR','TYR','TYR','TYR','TYR', 'TYR','TYR'],
'variant': ['buu', 'luu', 'stm','lol', 'bla', 'buu', 'lol','buu', 'luu', 'IDK','ploy'],
'genotype': ['hom', 'het', 'hom','het', 'hom', 'het', 'het','het', 'hom', 'hom','hom']})
df
patient gene variant genotype
0 patient1 TYR buu hom
1 patient1 TYR luu het
2 patient1 TYR stm hom
3 patient2 TYR lol het
4 patient2 TYR bla hom
5 patient3 TYR buu het
6 patient3 TYR lol het
7 patient4 TYR ploy het
8 patient4 TYR luu hom
9 patient4 TYR IDK hom
10 patient4 TYR buu hom
我需要找出带有“buu”和“luu”变体的病人
结果
patient1 TYR buu hom
patient1 TYR luu het
patient4 TYR luu hom
patient4 TYR buu hom
2条答案
按热度按时间js4nwp541#
Group by
patient
和过滤器组保留那些variant
包含两个所需变体(buu
,luu
)的组:A
是集合B
的超集时,set(A) >= set(B)
给出True
由于数据集从一开始就被过滤(通过
var_set
),因此使用以下组过滤器可以实现相同的效果:set(x['variant']) == var_set
x['variant'].nunique() == 2
5lwkijsr2#
另一种方法是首先过滤 Dataframe ,然后使用
.nunique
和.transform
查找符合条件的行。