Как сопоставить два кадра данных на основе полей поиска и обновить эти поля только в панд?

#python #python-3.x #pandas #dataframe

Вопрос:

У меня есть два кадра данных. Я должен сопоставить их на основе столбцов поля поиска и обновить эти столбцы в одном из фреймов данных, если будет обнаружено какое-либо несоответствие.

Пример:

 lkp_field = ['program_name', 'file_type']

df1:

project_number      file_name      program_name      file_type  
10                  pdf_11         plasma protein    feedback

df2:

project_number      file_name      program_name      file_type  
10                  pdf_13         oncology          guidence
 

В приведенном выше примере мы видим, что df1 и df2 не совпадают, поэтому мне нужно обновить Lkp_field в df2 из df1.

Конечным результатом будет:

 df2:

project_number      file_name      program_name      file_type  
10                  pdf_13         plasma protein    feedback
 

Комментарии:

1. df2.update(df1)

2. @AnuragDabas — Он обновляет все столбцы, OP нужно только обновить lkp_field

Ответ №1:

Если необходимо сопоставить по project_number значениям, сначала сопоставьте фрейм данных по преобразованию значений в индекс, а затем используйте DataFrame.update только по выбранным столбцам:

 df1 = df1.set_index('project_number')
df2 = df2.set_index('project_number')
df2.loc[:, lkp_field].update(df1.loc[:, lkp_field])
 

Если один и тот же индекс обоих кадров данных:

 df2.loc[:, lkp_field].update(df1.loc[:, lkp_field])
 

Комментарии:

1. будет ли это работать, если в df1 и df2 будет более 100 записей?

2. @ShivikaPatel — Конечно, нет никаких причин, почему бы не работать.