Объединить два DataFrame, имеющих заголовки разных уровней, по общему полю
Имею два массива, совпадающих по ID, но разных по набору колонок - в одном заголовки 2-х уровневые, в другом - одноуровневые.
Первый, допустим, df1 (содержит информацию о значениях profit и loss в разрезе месяцев и ID):
profit loss
period 2020-01 2020-02 2020-01 2020-02
ID
1 10 10 1 4
2 20 20 2 5
3 30 30 3 6
4 40 40 4 7
Второй df2 (содержит некое строковое описание конкретного ID в месяце):
period 2020-01 2020-02
ID
1 'str1' 'str1'
2 'str1' 'str1'
3 'str1' 'str2'
4 'str1' 'str2'
Надо получить res:
profit loss description
period 2020-01 2020-02 2020-01 2020-02 2020-01 2020-02
ID
1 10 10 1 4 'str1' 'str1'
2 20 20 2 5 'str1' 'str1'
3 30 30 3 6 'str1' 'str2'
4 40 40 4 7 'str1' 'str2'
Делаю так:
res = df1.merge(df2, how='left', left_on='ID', right_on='ID')
Получаю предупреждение:
UserWarning: merging between different levels can give an unintended result (2 levels on the left, 1 on the right)
Задача:
в df2 добавить заголовок 1-го уровня description, чтобы обеспечить одинаковый уровень - ?
Ответы (1 шт):
Автор решения: MaxU
→ Ссылка
In [120]: df2.columns = pd.MultiIndex.from_product((['description'], df2.columns))
In [121]: df1.join(df2)
Out[121]:
profit loss description
2020-01 2020-02 2020-01 2020-02 2020-01 2020-02
ID
1 10 10 1 4 'str1' 'str1'
2 20 20 2 5 'str1' 'str1'
3 30 30 3 6 'str1' 'str2'
4 40 40 4 7 'str1' 'str2'