Извлечение подстроки в кадре данных на основе позиций начала и конца индексов, определенных в двух других столбцах - PullRequest
0 голосов
/ 30 октября 2019
df=  "start", "stop", "Seq"
   50       121   aaaaaaaaaaaaabbbbbbbbbbbbcccccccccc...dddddd
   25       150   aaaaahhhhhhhssssssssssssssccccccccc...dddddd

Мне нужно извлечь подстроку в столбце «Seq» кадра данных (df), используя str.slice (start = start, stop = stop), используя в качестве значений start и stop значения в столбцах с именем «start"и" стоп "(для каждой из строк информационного кадра).

Я хотел бы использовать функцию def или лямбду, но я получаю ошибки

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')

1 Ответ

0 голосов
/ 30 октября 2019

Используйте .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)

Или используяzip с list 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
...