大熊猫-合并列上具有multiindex的df与索引上其他df的合并(无multiindex)

时间:2020-07-10 12:19:05

标签: python pandas merge multi-index

我的Google-fu没有给我带来答案,所以我在这里发布我的问题。

假设我有两个数据帧df1df2,并且我想将它们合并。 df1在列上有一个多索引,而df2由一个带有索引的多索引列组成。索引df2的名称与df1中一列的名称(在级别1)一致。如何使用df1中的 one 列和df2的索引来合并框架?一个简单的例子是这样的:

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 :(得分:0)

根据对问题的理解,您希望基于Col_2将df1和df2连接在一起。这是您的操作方法。如果有些我想念的部分,请添加评论。

#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