Вы можете в значительной степени использовать split () как df.col.str.split('via|on',expand=True)[[0,2]
:
Позволяет подробнее ........
Воспроизведение вашего фрейма данных:
>>> df
col
0 Other via Other on 17 Jan 2019
1 Other via Other on 17 Jan 2019
2 Interview via E-mail on 14 Dec 2018
3 Rejected via E-mail on 15 Jan 2019
4 Rejected via E-mail on 15 Jan 2019
5 Rejected via E-mail on 15 Jan 2019
6 Rejected via E-mail on 15 Jan 2019
7 Interview via E-mail on 14 Jan 2019
8 Rejected via Website on 12 Jan 2019
Давайте рассмотрим здесь. Сначала разбиваем весь столбец на основе требуемых строк via
и on
, которые разбивают весь столбец col
на три отдельных разделенных столбца 0 1 2
, где 0
будет до строка via
& 2
будет после строки on
, а остаток будет средним, то есть столбцом 1
, который нам не нужен.
Итак, мы можем взять на себя свободу и выбрать только столбцы 0
& 2
следующим образом.
>>> df.col.str.split('via|on',expand=True)[[0,2]]
0 2
0 Other 17 Jan 2019
1 Other 17 Jan 2019
2 Interview 14 Dec 2018
3 Rejected 15 Jan 2019
4 Rejected 15 Jan 2019
5 Rejected 15 Jan 2019
6 Rejected 15 Jan 2019
7 Interview 14 Jan 2019
8 Rejected 12 Jan 2019
Лучше назначить новый фрейм данных и переименовать столбцы:
Результат:
newdf = df.col.str.split('via|on',expand=True)[[0,2]]
newdf.rename(columns={0: 'col1', 2: 'col2'}, inplace=True)
print(newdf)
col1 col2
0 Other 17 Jan 2019
1 Other 17 Jan 2019
2 Interview 14 Dec 2018
3 Rejected 15 Jan 2019
4 Rejected 15 Jan 2019
5 Rejected 15 Jan 2019
6 Rejected 15 Jan 2019
7 Interview 14 Jan 2019
8 Rejected 12 Jan 2019