用A + B列中的字符替换[C]中的字符的最佳方法是什么

时间:2019-10-18 19:12:25

标签: python pandas conditional-statements

我正在使用熊猫,并且在执行以下任务时遇到问题。

我有下表:

CHROM   POS     SNP
chr1    931131  ?
chr1    959265  ?
chr1    970922  ?
chr1    973693  rs3892467
chr1    973858  rs3829740

并且每次[SNP]中的值为='?'我想通过喜悦其他两列中的值来更改它,以便输出是这样的:

CHROM   POS     SNP
chr1    931131  chr1:931131
chr1    959265  chr1:959265
chr1    970922  chr1:970922
chr1    973693  rs3892467
chr1    973858  rs3829740

先谢谢您 加布里埃拉

3 个答案:

答案 0 :(得分:2)

使用Series.mask

df['SNP']=df['SNP'].mask(df['SNP'].eq('?'),df['CHROM'].add(':')+df['POS'].astype(str))

print(df)

  CHROM     POS          SNP
0  chr1  931131  chr1:931131
1  chr1  959265  chr1:959265
2  chr1  970922  chr1:970922
3  chr1  973693    rs3892467
4  chr1  973858    rs3829740

答案 1 :(得分:2)

您可以尝试

df.loc[df['SNP'] == '?', 'SNP'] = df[['CHROM', 'POS']].apply(':'.join, axis = 1)

你得到

   CHROM    POS     SNP
0   chr1    970922  chr1:970922
1   chr1    970922  rs3892467

答案 2 :(得分:0)

也许最快的方法是“哪里”:

df["SNP"]=df.SNP.where( df.SNP.ne("?"), df.CHROM+":"+df.POS )

或POS是否为int类型:

df["SNP"]=df.SNP.where( df.SNP.ne("?"), df.CHROM+":"+df.POS.astype(str) )