我有一个如下所示的数据框:
CCDS Size gene exonCount
10804 NM_001320648_exon_4_0_chr21_44515804_r 50 U2AF1L5 8
9385 NM_018964_intron_9_0_chr21_43967251_f 6921 SLC37A1 21
1253 NM_004540_intron_4_0_chr21_22664562_f 32141 NCAM2 18
5233 NM_203417_intron_1_0_chr21_35893957_r 1878 RCAN1 4
3242 NM_001353691_intron_0_0_chr21_32493156_r 3684 TIAM1 30
我想解析CCDS专栏并以下列方式引入一个名为farme
的新专栏:
1)如果CCDS列的最后一个字段(基于“_”解析后)为f
,则frame
值为df['CCDS'].str.split('_').str[3]+1
; &安培;
2)如果CCDS列的最后一个字段是r
,那么frame
值将等于|exonCount-df['CCDS'].str.split('_').str[3]|
的绝对值
我试图设计一个lambda函数,但我不确定如何详细说明else
条件:
df['frame'] = df.Set.map( lambda x: df['CCDS'].str.split('_').str[3]+1
if intronExon_LDU['CCDS'].str.split('_').str[7] == 'f'
else ????)
答案 0 :(得分:2)
使用np.where
(可以轻松推广到多个/嵌套条件)
v = df['CCDS'].str.split('_').str[3].astype(int)
df['frame'] = np.where(df['CCDS'].str.endswith('f'), v + 1, v)
或者,loc
带有布尔掩码,
df['frame'] = v
df.loc[df['CCDS'].str.endswith('f'), 'frame'] += 1
使用str.endswith
干净地生成蒙版。