Найти индекс подстроки в строке из фрейма данных - PullRequest
2 голосов
/ 13 июля 2020

У меня есть фрейм данных с двумя столбцами (и множеством строк), один столбец - это полная последовательность, другой contains a sub sequence.

Я хочу найти индекс, где начинается подпоследовательность в полной последовательности и добавьте это как другой столбец:

Я пробовал это:

df["start"] = df.sequence.index(df.sub_sequence)

Но это возвращает: TypeError: 'RangeIndex' object is not callable

Что я делаю не так?

Вот df и df i wi sh, чтобы в итоге получилось:

Пример фрейма данных:

import pandas as pd 

data = {"sequence": ["abcde","fghij","klmno"], "sub_sequence": ["cde", "gh", "no"]}    
df = pd.DataFrame (data, columns = ['sequence','sub_sequence'])

  sequence sub_sequence
0    abcde          cde
1    fghij           gh
2    klmno           no

Ожидаемый результат:

data2 = {"sequence": ["abcde","fghij","klmno"], "sub_sequence": ["cde", "gh", "no"], "start": [2,1,3]}
df2 = pd.DataFrame (data2, columns = ['sequence','sub_sequence','start'])

  sequence sub_sequence  start
0    abcde          cde      2
1    fghij           gh      1
2    klmno           no      3

1 Ответ

3 голосов
/ 13 июля 2020

Используйте zip и str.index в понимании списка:

df['start'] = [seq.index(sub) for seq, sub in zip(df['sequence'], df['sub_sequence'])]

ИЛИ Используйте DataFrame.apply вместе axis=1 + str.index:

df['start'] = df[['sequence', 'sub_sequence']].apply(lambda s: str.index(*s), axis=1)

Результат:

  sequence sub_sequence  start
0    abcde          cde      2
1    fghij           gh      1
2    klmno           no      3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...