【问题标题】:python pandas df merge on part of multiindexpython pandas df在multiindex的一部分上合并
【发布时间】:2019-12-21 18:28:23
【问题描述】:

我正在使用 Python 3 和 pandas。

我有两个具有多索引的数据框,一个索引由 a、b 列组成,另一个索引由 a、b、c 列组成,为了这篇文章,让我们相应地调用数据框 ab 和 abc .

我想像这样使用与熊猫的左合并

abc.merge(ab, how="left") 并使用索引来创建合并。当然,我只需要索引中的 a,b,因为 c 不在 ab 中,如何在不删除级别且不重置索引的情况下创建此合并?

首选使用多索引的简单有效的解决方案。

谢谢

【问题讨论】:

    标签: python pandas dataframe merge data-science


    【解决方案1】:

    您可以使用join 获得相同的结果,因为它更注重索引。这是我曾经在pd.MultiIndex的介绍中教过的一个MVE:

    first_index = [('A', 'a'), ('A', 'b'), ('B', 'a'), ('B', 'b')]
    second_index = [('A', 'a', 'c'), ('A', 'b', 'c'), ('B', 'a', 'c'), ('B', 'b', 'c')]
    data = [1, 2, 3, 4]
    
    ab = pd.DataFrame(data=data, index=pd.MultiIndex.from_tuples(first_index, 
                                                                 names=['A', 'B']), 
                      columns=['col_1'])
    abc = pd.DataFrame(data=data, index=pd.MultiIndex.from_tuples(second_index, 
                                                                  names=['A', 'B', 'C']), 
                       columns=['col_2'])
    
    ab
    A   B   col_1
    A   a   1
    A   b   2
    B   a   3
    B   b   4
    
    abc
    A   B   C   col_2
    A   a   c   1
    A   b   c   2
    B   a   c   3
    B   b   c   4
    

    所以到现在为止,这只是简单的带名称的 MultiIndex,但在这些名称上使用了连接:

    abc.join(ab, on=['A', 'B'], how='left')
    A   B   C   col_2   col_1
    A   a   c   1   1
    A   b   c   2   2
    B   a   c   3   3
    B   b   c   4   4
    

    您将获得left 加入而没有reset_index

    【讨论】:

      猜你喜欢
      • 2022-12-07
      • 2018-07-22
      • 2020-06-15
      • 2018-06-30
      • 2022-01-04
      • 2016-04-01
      • 2020-11-30
      • 1970-01-01
      • 2018-01-06
      相关资源
      最近更新 更多