Заменить строку соответствующей строкой из другого столбца с пандами - PullRequest
0 голосов
/ 11 января 2019

У меня есть фрейм данных с именем df , который выглядит примерно так:

pd.DataFrame({
    'column1' : ['client#1 is #name#', 'client#2 is #name#'], 
    'column2': ['josh', 'max']}
)

              column1 column2
0  client#1 is #name#    josh
1  client#2 is #name#     max

Я пытаюсь заменить фразу " # name " в column1 значением column2. Я хочу, чтобы конечный результат выглядел так:

enter image description here

Я испробовал несколько подходов, подобных следующему:

df['column1'] = df['column1'].replace(["#name#"], df['column2'])

Но я не уверен, как получить конкретную фразу ' # name # ' в column1 и заменить ее значением column2. Будем очень благодарны за любые предложения о том, как подойти к этому!

1 Ответ

0 голосов
/ 11 января 2019

Если это строки, и если нет NaN, я бы порекомендовал вызвать str.replace внутри списка для скорости:

df['column1'] = [
    x.replace('#name#', y) for x, y in zip(df.column1, df.column2)]

df
            column1 column2
0  client#1 is josh    josh
1   client#2 is max     max

Почему списочные выражения того стоят для строковых операций? Вы можете прочитать больше на Для петель с пандами - Когда мне все равно? .


Другой интересный вариант, который вы можете рассмотреть, это str.replace с iter:

it = iter(df.column2)
df['column1'] = df.column1.str.replace('#name#', lambda x: next(it))

df
            column1 column2
0  client#1 is josh    josh
1   client#2 is max     max

Должно нормально обрабатывать NaN и смешанные типы (но будет медленнее).


Более простая опция replace от @Vaishali, которая будет работать, если подстрока "# name #" всегда находится в конце строки.

df['column1'] = df.column1.add(df.column2).str.replace('#name#', '')
df
            column1 column2
0  client#1 is josh    josh
1   client#2 is max     max
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...