【问题标题】:pandas - merge df with multiindex on column with other df on index (without multiindex)pandas - 将 df 与列上的多索引与索引上的其他 df 合并(没有多索引)
【发布时间】:2020-10-31 04:31:40
【问题描述】:

我的 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'))

我的目标是将('B', 'Col_2') 列上的df1 与索引上的df2 合并,保留df1 中的所有列。该怎么做?

【问题讨论】:

    标签: python pandas merge multi-index


    【解决方案1】:

    根据对您希望基于 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
    

    【讨论】:

    • 这是可以接受的,但我需要保留整个数据框 df1 并且您的解决方案会删除其中的一半 :) 抱歉,我应该提到这一点。
    • 用其他名称重命名这些列,然后按照相同的合并步骤。我认为这将达到结果。如果有帮助,请点赞答案:)
    猜你喜欢
    • 1970-01-01
    • 2016-09-26
    • 2019-12-06
    • 2020-10-14
    • 2017-06-17
    • 2023-01-18
    • 2021-09-01
    • 2017-11-29
    • 2011-11-07
    相关资源
    最近更新 更多