#python #pandas #dataframe #join
#python #панды #фрейм данных #Присоединиться
Вопрос:
Я новичок в pandas. Я пытаюсь объединить два набора данных, как показано ниже:
df1:
df1 = pd.DataFrame({'id': [1121, 1122, 1123, 1124, 1125], 'name': ['F.01', 'F.01', 'F.02', 'F.02', 'F.02'], 'description': ['r1', 'r2', 'l1', 'l2', 'l3']})
Выглядит так:
id name description
1121 F.01 r1
1122 F.01 r2
1123 F.02 l1
1124 F.02 l2
1125 F.02 l3
df2:
df2 = pd.DataFrame({'code': ['F.01', 'F.02'], 'r1': [1, 0], 'r2': [2, 0], 'l1': [0, 3], 'l2': [0, 4], 'l3': [0, 5]})
df2 выглядит так:
code r1 r2 l1 l2 l3
F.01 1 2 0 0 0
F.02 0 0 3 4 5
Результат, который я хотел бы, чтобы они соответствовали
df1.name = df2.code
df1.description = df2.(column name)
Результат, который я предпочитаю, выглядит так:
id name description value
1121 F.01 r1 1
1122 F.01 r2 2
1123 F.02 l1 3
1124 F.02 l2 4
1125 F.02 l3 5
Спасибо!
Комментарии:
1.
df2.melt("code")
а затем выполнитеmerge
сdf1
помощью .
Ответ №1:
Общее руководство Генри правильное, но в нем отсутствуют некоторые необходимые детали.
Для получения ожидаемого результата требуются следующие шаги:
- переименовать код в df2 в name,
- расплавьте df2 по имени, установив var_name в description,
- объедините df1 с приведенным выше результатом расплава по имени и описанию.
Код для этого:
result = pd.merge(df1, df2.rename(columns={'code': 'name'}).melt(
'name', var_name='description'), on=['name', 'description'])
Результат:
id name description value
0 1121 F.01 r1 1
1 1122 F.01 r2 2
2 1123 F.02 l1 3
3 1124 F.02 l2 4
4 1125 F.02 l3 5