str.replace
- это метод Series , поэтому его можно применять к каждому элементу
конкретного столбца , но здесь невозможно сослаться на любой другой
колонка.
Таким образом, вы должны импортировать re и использовать вместо него re.sub
в функции
применяется к каждой строке (так что эта функция может ссылаться на другие
столбцы текущей строки).
Ваша задача может быть выполнена в одной инструкции:
df['replaced'] = df.apply(lambda row: re.sub(
'^' + row.names + r'\s*', '', row.hobbies), axis=1)
Это решение работает быстрее, чем создание Series с для loop
внутри и замените под колонкой впоследствии, потому что apply берет
заботиться о цикле над DataFrame, чтобы применяемая функция отвечала
только для генерации значения для текущей строки.
Важным фактором, касающимся скорости выполнения, является также то, что
Вы избегаете расположения текущей строки по индексу, каждый раз в цикле.
Кроме того, ваш код не будет работать, если индекс был другим
чем последовательные числа, начиная с 0.
Попробуйте, например, создать свой DataFrame с index=np.arange(1, 5)
параметр.