Я плохо разбираюсь в Pandas и не очень хорошо понимаю Python.
Я хочу обновить столбец (d.Alias
) на основе значения существующих столбцов (d.Company
и * 1005).*).d.Alias
должно быть равно d2.Alias
, если d2.Alias
является подстрокой d.Company
.
Примеры наборов данных:
d = {'Company': ['The Cool Company Inc', 'Cool Company, Inc', 'The Cool
Company', 'The Shoe Company', 'Muffler Store', 'Muffler Store'],
'Position': ['Cool Job A', 'Cool Job B', 'Cool Job C', 'Salesman',
'Sales', 'Technician'],
'City': ['Tacoma', 'Tacoma','Tacoma', 'Boulder', 'Chicago', 'Chicago'],
'State': ['AZ', 'AZ', 'AZ', 'CO', 'IL', 'IL'],
'Alias': [np.nan, np.nan, np.nan, np.nan, np.nan, np.nan]}
d2 = {'Company': ['The Cool Company, Inc.', 'The Shoe Company', 'Muffler
Store LLC'],
'Alias': ['Cool Company', np.nan, 'Muffler'],
'First Name': ['Carol', 'James', 'Frankie'],
'Last Name': ['Fisher', 'Smith', 'Johnson']}
np.nan
для The Shoe Company
потому чтов этом случае псевдоним не требуется.
Я пытался использовать .loc
, for
петли, while
петли, pandas.where
, numpy.where
и несколько вариантов каждого без желаемых результатов.При использовании цикла for
конец d2.Alias
копировался во все строки в d.Alias
.Однако я не смог воспроизвести это.
Предыдущие посты, которые я просмотрел, я не смог заставить их работать или не понял их: Условно заполнить столбец значением из другого DataFrame, основываясь на совпадении строк в Pandas pandas создает новый столбец на основе значений из других столбцов
Любая помощь приветствуется!
РЕДАКТИРОВАТЬ:
Ожидаемый результат
Обновление:
После нескольких дней работы я достиг желаемого результата.С ответом Вэнь мне пришлось изменить несколько вещей.
Сначала я создал список из df2.Alias
с именем aliases
:
aliases = df2.Alias.unique()
Затем мне пришлосьудалить .map(df2.set_index('Company').Alias
.Строка, которая произвела мои желаемые результаты:
df1['Alias'] = df1.Company.apply(lambda x: [process.extract(x, aliases, limit=1)][0][0][0])
.