парсинг по вложенным спискам
4-й день воюю с задачей, вопрос следующий: Есть пара DF (очевидно что фреймы тестовые - реальные немного отличаются но суть та же):
import pandas as pd
df = pd.DataFrame({'Отдел': ['отд_1', 'отд_1', 'отд_1', 'отд_2', 'отд_2', 'отд_2', 'отд_2'],'ФИО': ['Иванов Иван Иванович', 'Петров С.А.', 'Алексеев Евгений', 'Сидоров Георгий Иванович', 'Любимов Валерий Петрович', 'Сомов Рыб Рыбович','Иванов Иван Иванович',]})
df_lib = pd.DataFrame({'Отдел': ['отд_2', 'отд_2', 'отд_1'],'old': ['Иванов', 'Петров', 'Сидоров'],'new': ['Ivanov', 'Petrov', 'Sidorov']})
С помощью следующего кода я вытаскиваю группы слов для анализа (из df_lib
) :
df['test'] = df["ФИО"].str.extract('(' + '|'.join(list(df_lib["old"])) + ')').merge(df_lib, left_on=0, right_on='old', how ='left')['new']
И как раз в этом коде есть вопрос! Дело в том что код проходит поиском слов по столбцу df_lib["old"]
целиком что не верно, так как в примере есть одинаковые ФИО из разных отделов в разных отделах есть собственные пулы слов для парсинга! Есть ли идей как парсить слова по отделу а не целиком?
История с if - else
или разбить группы на отдельные столбцы не подойдут так как групп (в нашем случае отделов) >1000
Пробывал играться с групповым .merge
:
final_df = pd.merge(df, df_lib[['Отдел', 'new', 'old']], how="left", left_on=['Отдел', 'test'], right_on=['Отдел', 'new'])
- но так как на входе мы получаем столбец
test
-который как раз и отвечает за поиск слов, идея была отложена! Буду рад любым идеям! Спасибо!
Источник: Stack Overflow на русском