gpt4 book ai didi

python - 如何过滤一列中在另一列中具有公共(public)值的两个特定值

转载 作者:行者123 更新时间:2023-12-03 07:56:45 25 4
gpt4 key购买 nike

问题

我的数据框的最小可重现示例如下所示

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

最佳答案

分组依据patient和过滤组保留那些 variant包含两个必需的变体( buuluu ):

var_set = {'buu', 'luu'}  # set of variants
df[df['variant'].isin(var_set)].groupby('patient')\
.filter(lambda x: set(x['variant']) >= var_set)

  • set(A) >= set(B)给出True设置时A是集合 B 的超集

由于数据集从一开始就被过滤(通过 var_set ),使用以下组过滤器可以实现相同的效果:

  • set(x['variant']) == var_set

  • x['variant'].nunique() == 2


    patient gene variant genotype
0 patient1 TYR buu hom
1 patient1 TYR luu het
7 patient4 TYR buu het
8 patient4 TYR luu hom

关于python - 如何过滤一列中在另一列中具有公共(public)值的两个特定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75881479/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com