当有两个以上的条件时,使用.map()函数取决于另一列的值[重复]

问题描述 投票:0回答:1

我有以下数据帧:

    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

我想根据这些词典替换genesac下的值:

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)。在这种情况下,我如何获得所需的输出?

python pandas dataframe mapping
1个回答
1
投票

我建议使用字典词典。

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))]
© www.soinside.com 2019 - 2024. All rights reserved.