Какой лучший способ заменить символ в [C] на символы из столбца A + B - PullRequest
0 голосов
/ 18 октября 2019

Я использую панды, и я получил стек для следующей задачи.

У меня есть следующая таблица:

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 ]

2 голосов
/ 18 октября 2019

Вы можете попробовать

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 голосов
/ 18 октября 2019

использование 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
0 голосов
/ 18 октября 2019

Возможно, самый быстрый метод - это "где":

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) )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...