Объедините столбцы и назначьте их столбцу в панд

#pandas #merge

Вопрос:

У меня есть 2 фрейма данных pandas в следующих форматах:

 df1:

Code     Temp    tmp_Code   tmp_Age
ABCDFG   NaN     ABCDF      NaN
ABCDEF   15      ABCDE      NaN

df2

Code   Temp
ABCDF  18
ABCDL  21
 

Я пытаюсь объединить 2 фрейма данных pandas на основе tmp_Code в df1 с кодом в df2. Если есть совпадение, значение в df2[‘Temp’] должно быть заполнено в df1[‘tmp_Age’]. Я смог выполнить объединение, но не уверен, как назначить его df1[‘tmp_Age’].

Код, который я пробовал:

 df['tmp_Age'] = pd.merge(df[['tmp_Code','Temp']], df2[['Code','Temp']],left_on='tmp_Code',right_on='Code',how='left')
 

Желаемый результат:

 Code     Temp    tmp_Code   tmp_Age
ABCDFG   NaN     ABCDF      18
ABCDEF   15      ABCDE      NaN
 

Любые предложения будут оценены по достоинству.

Ответ №1:

Выберите столбец Temp_y и установите его в качестве нового столбца:

 df['tmp_Age'] = pd.merge(df[['tmp_Code','Temp']], df2[['Code','Temp']],
                         left_on='tmp_Code', right_on='Code',
                         how='left')['Temp_y']  # <- HERE
print(df)

# Output:
     Code  Temp tmp_Code  tmp_Age
0  ABCDFG   NaN    ABCDF     18.0
1  ABCDEF  15.0    ABCDE      NaN
 

Альтернатива объединению одного столбца из фрейма данных в другой:

 df['tmp_Age'] = df['tmp_Code'].map(df2.set_index('Code')['Temp'])
print(df)

# Output:
     Code  Temp tmp_Code  tmp_Age
0  ABCDFG   NaN    ABCDF     18.0
1  ABCDEF  15.0    ABCDE      NaN
 

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

1. @пользователь3447653. Решает ли это вашу проблему?