这个问题在这里已有答案:
我有以下数据帧:
gene sample SQ assay
0 FAM coop1 842.400000 SIQ
1 FAM 2 NaN SIQ
2 HEX 2 NaN EEK
3 FAM 3 NaN SIQ
4 HEX 3 6.225000 TSI
我想根据这些词典替换genes
ac下的值:
SIQ_map = {'FAM':'qnrS','Texas Red':'IC','HEX':"Sul1"}
TSI_map = {'FAM':'blaSHV','Texas Red':'Int1','HEX':'TetB'}
MOA_map = {'FAM':'blaOXA','Texas Red':'Aph3a','HEX':'MecA'}
EEK_map = {'FAM':'','Texas Red':'','HEX':'blaKPC'}
BAM_map = {'FAM':'TetM','Texas Red':'VanB','HEX':'VanA'}
我在数据帧中使用了.map()
函数,只有一种类型的assay
。但是,如果有多个,我如何根据assay
值选择不同的字典进行映射?
我想要的是这个输出:
gene sample SQ assay
0 qnrS coop1 842.400000 SIQ
1 qnrS 2 NaN SIQ
2 2 NaN EEK
3 qnrS 3 NaN SIQ
4 TetB 3 6.225000 TSI
我在另一个问题中看到使用np.where()
,但这似乎只适用于有两个条件的情况。就我而言,我有5个条件(SIQ,TSI,MOA,EEK和BAM)。在这种情况下,我如何获得所需的输出?
我建议使用字典词典。
assay_map = {'SIQ': {'FAM':'qnrS','Texas Red':'IC','HEX':"Sul1"},
'TSI': {'FAM':'blaSHV','Texas Red':'Int1','HEX':'TetB'},
'MOA': {'FAM':'blaOXA','Texas Red':'Aph3a','HEX':'MecA'},
'EEK': {'FAM':'','Texas Red':'','HEX':'blaKPC'},
'BAM': {'FAM':'TetM','Texas Red':'VanB','HEX':'VanA'}}
这样您就可以根据检测来解决任何基因。现在我们可以映射数据了。
df['New Column']=[a[g] for g,a in zip(df['gene'],df['assay'].map(m))]