#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. Решает ли это вашу проблему?