根据在其他两列中定义的开始索引和停止索引位置,在dataframe中提取子字符串

2024-04-26 06:21:38 发布

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

df=  "start", "stop", "Seq"
   50       121   aaaaaaaaaaaaabbbbbbbbbbbbcccccccccc...dddddd
   25       150   aaaaahhhhhhhssssssssssssssccccccccc...dddddd

我需要使用结构切片(start=start,stop=stop)使用名为“start”和“stop”的列中的值作为start和stop值(对于数据帧的每一行)。你知道吗

我想使用def函数或lambda,但我得到了错误

def f(x,y,z):
return z.str.slice(start=x, stop=y)
df.apply(lambda x: f(x["start"],x["stop"],x["Seq"]))

输出: KeyError:('start','发生在索引id')


Tags: 数据lambda函数dfreturndef错误切片
1条回答
网友
1楼 · 发布于 2024-04-26 06:21:38

使用.apply对每行应用切片,格式为:string[start:stop]

df.apply(lambda x: x['Seq'][x['start']:x['stop']], axis=1)

0      aaabbbbbbbb
1    sssssssssssss
dtype: object

如果要定义函数:

def slice_str(string, start, stop):
    return string[start:stop]

df.apply(lambda x: slice_str(x['Seq'], x['start'], x['stop']), axis=1)

或者将ziplist comprehension一起使用:

slices = [string[start:stop] for string, start, stop
          in zip(df['Seq'], df['start'], df['stop'])]

['aaabbbbbbbb', 'sssssssssssss']

使用的输入数据帧

   start  stop                                        Seq
0     10    21  aaaaaaaaaaaaabbbbbbbbbbbbccccccccccdddddd
1     12    25  aaaaahhhhhhhsssssssssssssscccccccccdddddd

相关问题 更多 >

    热门问题