Как заменить строку в предложении на позицию индекса - PullRequest
0 голосов
/ 30 апреля 2018

Как я могу переместить соответствующую подстроку в данном предложении в начало предложения?

col1 всегда в нижнем регистре.

У меня есть:

col1      col2                          output
mmm2      Hello I want Mmm2 replace it  Mmm2 Hello I want replace it
mmm5      I want MMM5 replace it        MMM5 I want replace it
mmm1      I mmm1 want replace it        mmm1 I want replace it

Ответы [ 3 ]

0 голосов
/ 01 мая 2018

Не уверен, что это правильный подход. Я использую регулярное выражение для получения необходимого результата.

Демо:

import pandas as pd
import re
df = pd.DataFrame({"col1": ["mmm2", "mmm5"], "col2": ["Hello I want Mmm2 replace it", "I want MMM5 replace it"]})

df["output"] = df.apply(lambda row: re.sub(row["col1"], "", row["col2"], flags=re.IGNORECASE), axis=1)
df["output"] = df.apply(lambda row: "{0} {1}".format(re.search(row["col1"], row["col2"], flags=re.IGNORECASE).group(0), row["output"]), axis=1)

print(df)

Выход:

   col1                          col2                         output
0  mmm2  Hello I want Mmm2 replace it  Mmm2 Hello I want  replace it
1  mmm5        I want MMM5 replace it        MMM5 I want  replace it
0 голосов
/ 01 мая 2018

Одним из решений является использование list.insert и list.pop для перемещения вашего слова в начало. Это может быть объединено с pd.DataFrame.apply.

Данные @ Ракеш.

import pandas as pd

def transporter(row):
    split = row['col2'].split()
    idx = next((i for i, j in enumerate(split) if j.lower() == row['col1']), None)
    if not idx:
        return row['col2']
    else:
        split.insert(0, split.pop(idx))
        return ' '.join(split)

df = pd.DataFrame({"col1": ["mmm2", "mmm5"],
                   "col2": ["Hello I want Mmm2 replace it", "I want MMM5 replace it"]})

df['col2'] = df.apply(transporter, axis=1)

print(df)

   col1                          col2
0  mmm2  Mmm2 Hello I want replace it
1  mmm5        MMM5 I want replace it
0 голосов
/ 30 апреля 2018

Один метод:

start_index = string.lower().index(target)
new_string = target+string[0:start_index]+string[start_index+len(target):]

Это выдаст ошибку, если target не в string, и будет перемещать первый экземпляр, только если есть несколько.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...