Замена части элемента ячейки в датафрейм Pandas
Помогите, пожалуйста, знающие люди. Не пойму каким оператором воспользоваться
Имеется датафрейм
Полоса Позиция
1 24-1
1 24-2
1 24-2
2 1-1
2 1-1
2 1-2
2 1-3
2 1-4
3 2-1
3 2-2
3 2-2
3 2-3
Как можно в столбце Позиция первое число заменить на число из столбца Полоса не меняя второе число
Надо в итоге получить:
Полоса Позиция
1 1-1
1 1-2
1 1-2
2 2-1
2 2-1
2 2-2
2 2-3
2 2-4
3 3-1
3 3-2
3 3-2
3 3-3
И еще похожий вопрос - как с помощью регулярного выражения добавить символ в текст ячейки. Например, найти все ФАМИЛИИ (написаны заглавными буквами) в текстовой ячейке с разным другим текстом и затем добавить о всем фамилиям во всех ячейках знак "?". Тут вероятно применить нужно поиск по шаблону ко всем ячейкам столбца?
Ответы (2 шт):
что касается первого вопроса, то можно попробовать что-то вроде этого:
df['Позиция'] = df['Полоса'].astype('str').str.cat(df['Позиция'].str.extract('(-\d+)'))
'''
Полоса Позиция
0 1 1-1
1 1 1-2
2 1 1-2
3 2 2-1
4 2 2-1
5 2 2-2
6 2 2-3
7 2 2-4
8 3 3-1
9 3 3-2
10 3 3-2
11 3 3-3
а что касается второго вопроса, то приведите воспроизводимый фрагмент данныx и пример необходимого результата, ну и еще правила требуют показать свои попытки решения.
можно так попробовать
df["Позиция"] = df.apply(lambda x: re.sub('\d{2}', str(x['Полоса']), x['Позиция']), axis=1)
>>> df
Полоса Позиция
0 1 1-1
1 1 1-2
2 1 1-2
3 2 1-1
4 2 1-1
5 2 1-2
6 2 1-3
7 2 1-4
8 3 2-1
9 3 2-2
10 3 2-2
11 3 2-3
чтобы к каждой фамилии в тексте добавить знак вопроса, можно сделать так (допустим столбец называется text)
df["text"] = df.apply(lambda x: re.sub(r'\b([А-ЯЁ][а-яё]+)\b', r'\1?', x['text']),
axis=1)