pandas - объединить df с мультииндексом по столбцу с другим df по индексу (без мультииндекса) - PullRequest
0 голосов
/ 10 июля 2020

Мой Google-fu не дал мне ответа, поэтому я публикую здесь свой вопрос.

Допустим, у меня есть два фрейма данных df1 и df2, и я хочу их объединить. df1 имеет мультииндекс по столбцам, а df2 состоит из одного мультииндексного столбца с индексом. Индекс df2 имеет имя, которое совпадает с именем (на уровне 1) одного столбца в df1. Как объединить кадры, используя один столбец в df1 и индекс df2? Простой пример: go выглядит так:

import pandas as pd

df1 = pd.DataFrame({('A', 'Col_1'): [1, 2, 3],
                    ('A', 'Col_2'): ['A', 'B', 'C'],
                    ('B', 'Col_1'): [1, 2, 3],
                    ('B', 'Col_2'): ['A', 'B', 'C']})

df2 = pd.DataFrame({('C', 'Col_1'): ['X', 'Y', 'Z']},
                   index=pd.Index(['A', 'B', 'C'], name='Col_2'))

Моя цель - объединить df1 в столбце ('B', 'Col_2') с df2 по индексу, сохранив все столбцы в df1. Как это сделать?

1 Ответ

0 голосов
/ 10 июля 2020

В соответствии с пониманием вопроса вы хотите, чтобы df1 и df2 были объединены на основе Col_2. Вот как это сделать. Если каким-то образом я пропустил эту часть, добавьте в комментарий.

#dropping the group header of columns from df1
df1.columns = df1.columns.droplevel(0)

#Removing the duplicated columns in df1
df1 = df1.loc[:,~df1.columns.duplicated()]

#dropping the group header of columns from df2
df2.columns = df2.columns.droplevel(0)

#Reset the index of df2 as first column
df2.reset_index(level=0, inplace=True)

#Concatinating 2 dataframes
new_df = pd.concat([df1.set_index('Col_2'),df2.set_index('Col_2')], axis=1, 
                    join='inner').reset_index()

Окончательный результат будет выглядеть так

       Col_2    Col_1     Col_1
   0    A          1       X
   1    B          2       Y
   2    C          3       Z
...