Я бы написал выражение регулярного выражения, чтобы извлечь числа из столбца, соединяющего таблицы, и, возможно, сделаю все остальное в excel ... (обновления столбца)
df1 = pd.DataFrame({'Department' : ['Merch - 1854', '1925 - WH','Montreal 10'],'TrueDeparment' : ['Empty','empty','empty']})
df2 = pd.DataFrame({'Dept_Nbr' : [1854, 1925, 10], 'Dept_Desc_HR' : ['Community Relations','Human Resources','Recruiting']})
Тогда вы можете попробовать, что делает функция:
line = 'Merch - 1854 '
match = re.search(r'[0-9]+', line)
if match is None:
print(0)
else:
print(int(match[0]))
Если вам нужно совпадение после символа, указанного в вашем комментарии, используйте это:
line = '12125 15151 Merch -1854 '
match = re.search(r'(?<=-)[0-9]+', line)
if match is None:
print(0)
else:
print(int(match[0]))
Обратите внимание, что если после "-" у вас есть пробелы или другие символы, вам нужно добавить его в регулярное выражение для работы!
Важно - вы полагаете, что у вас есть только один номер в вашем тексте - если нет, он возвращает 0, вы можете изменить его, если хотите, чтобы по крайней мере он не вышел из строя
Напишите функцию:
def extract_number(field):
match = re.search(r'(?<=-)[0-9]+', field)
if match is None:
return 0
else:
return int(match[0])
Применить к фрейму данных:
df1['num_col'] = df1[['Department']].apply(lambda row:extract_number(row['Department']),axis=1)
Наконец, выполните объединение:
df1.merge(df2, left_on = ['num_col'], right_on = ['Dept_Nbr'])
Отсюда вы можете определить, какой столбец вам нужен, будь то в Python или в Excel.