Создать новый столбец, возвращающий true / false, если имена в двух столбцах совпадают с помощью регулярных выражений - PullRequest
1 голос
/ 09 апреля 2019

У меня есть фрейм данных, где я пытаюсь сопоставить строковые значения столбцов двух столбцов, чтобы создать новый столбец, который возвращает true, если значения двух столбцов совпадают, или false, если они не совпадают.Хотите использовать совпадения и регулярные выражения, удалите все не алфавитно-цифровые символы и используйте строчные буквы для сопоставления имен

pattern = re.compile ('[^ a-zA-Z]')

    Name A         Name B
0   yGZ,)          ygz.
1   (CGI)          C.G.I
2   Exto           exto.
3   Golden         UTF

Я думал попробовать что-то вроде этого:

dataframe['Name A', 'Name B'].str.match(pattern, flags= re.IGNORECASE)

    Name A         Name B    Result
0   yGZ,)          ygz.       True
1   (CGI)          C.G.I      True
2   Exto           exto.      True
3   Golden         UTF        False

Ответы [ 2 ]

3 голосов
/ 09 апреля 2019

Можно использовать pd.DataFrame.replace для очистки строк, а затем сравнить с помощью eq.Конечно, если вы хотите сохранить копию вашего оригинального df, просто назначьте возвращенный фрейм данных новой переменной;}

df = df.replace("[^a-zA-Z0-9]", '', regex=True)

Затем

df['Result'] = df['Name A'].str.lower().eq(df['Name B'].str.lower())

Outputs

    Name A  Name B  Result
0   yGZ     ygz     True
1   CGI     CGI     True
2   Exto    exto    True
3   Golden  UTF     False
1 голос
/ 09 апреля 2019

Вы можете использовать str.replace для удаления знаков препинания (см. Также мой пост, Быстрое удаление знаков препинания с пандами ), затем

u = df.apply(lambda x: x.str.replace(r'[^\w]', '').str.lower())
df['Result'] = u['Name A'] == u['Name B']
df

   Name A Name B  Result
0   yGZ,)   ygz.    True
1   (CGI)  C.G.I    True
2    Exto  exto.    True
3  Golden    UTF   False
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...