我正在使用熊猫,并且在执行以下任务时遇到问题。
我有下表:
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
先谢谢您 加布里埃拉
答案 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) )