熊猫条件解析的列

2024-10-05 14:31:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样一个数据帧:

    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列的最后一个字段(基于“216;”解析后)是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 ????)

Tags: 数据lambdadfsizeframeelsesplitgene
1条回答
网友
1楼 · 发布于 2024-10-05 14:31:02

使用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干净地生成的。你知道吗

相关问题 更多 >