Мы можем использовать встроенный метод python, называемый partition
df['NextWord'] = df['Text'].apply(lambda x: x.partition('brca')[2]).str.split().str[0]
выход
Text Gene NextWord
0 carcinoma brca positive completion mastectomy brca positive
1 clinical brca gene mutation brca gene
2 carcinoma brca positive chemotherapy brca positive
Объяснение
.partition
возвращает три значения:
- Строка перед ключевым словом
- Само ключевое слово
- Строка после ключевого слова
string = 'carcinoma brca positive completion mastectomy'
before, keyword, after = string.partition('brca')
print(before)
print(keyword)
print(after)
выход
carcinoma
brca
positive completion mastectomy
Скорость
Мне было любопытно сравнить скорость ответов между ответами, поскольку я использовал .apply
, но это встроенный метод. Неожиданно мой ответ оказался самым быстрым:
dfbig = pd.concat([df]*10000, ignore_index=True)
dfbig.shape
(30000, 2)
%%timeit
dfbig['Text'].apply(lambda x: x.partition('brca')[2]).str.split().str[0]
31.5 ms ± 1.36 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
%%timeit
dfbig['NextWord'] = dfbig['Text'].str.split('brca').str[1].str.split('\s').str[1]
74.5 ms ± 2.56 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
%%timeit
dfbig['NextWord'] = dfbig['Text'].str.extract(r"(?<=brca)(.+?) ")
40.7 ms ± 2.4 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)