Замена части элемента ячейки в датафрейм 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 шт):

Автор решения: SergFSM

что касается первого вопроса, то можно попробовать что-то вроде этого:

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 и пример необходимого результата, ну и еще правила требуют показать свои попытки решения.

→ Ссылка
Автор решения: D.Vinogradov

можно так попробовать

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)
→ Ссылка