首页 > 解决方案 > python pandas df在multiindex的一部分上合并

问题描述

我正在将 Python 3 与熊猫一起使用。

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

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

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

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

谢谢

标签: pythonpandasdataframemergedata-science

解决方案


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

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.


推荐阅读