Как заменить строковые значения в одном кадре данных на основе другого «корректирующего» кадра данных без цикла или слияния - PullRequest
0 голосов
/ 19 ноября 2018

Скажем, у меня есть два фрейма данных, исходный и корректирующий фреймы данных, так что

orig = pd.DataFrame({'Name':['A','B'],'Code':['9q8','7k2']})

Name Code
A    9q8
B    7k2

corr = pd.DataFrame({'Name':['A',],'Code':['9R8',]})
Name Code
A    9R8

Как я могу назначить orig['Code']=corr['Code'] везде orig['Name']==corr['Name], не объединяя и не повторяя каждую коррекцию в corr итогда каждый оригинал в оригинале?Окончательный результат должен выглядеть следующим образом:

Name Code
A    9R8
B    7k2

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

Например, если я объединю orig и corr, я получу:

out = pd.merge(orig,corr,on='Name',how='outer')
Name Code
A    9q8
A    9R8
B    7k2

Что, если я смотрю на тысячи строк, не оставляет мне никакого способа узнать, какой из A 9q8 и A 9R8 была заменой, а которая - нет.Я не могу использовать столбец индикатора, чтобы отличить замены от не подстановок, потому что удаление всех записей «только для левого» »также приведет к удалению записи B 7k2.

1 Ответ

0 голосов
/ 19 ноября 2018
orig.set_index('Name',inplace=True)
orig.update(corr.set_index('Name'))

orig.reset_index(inplace=True)
orig
Out[164]: 
  Name Code
0    A  9R8
1    B  7k2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...