连接或合并具有不同多索引的数据框

时间:2020-07-10 17:19:10

标签: python pandas dataframe multi-index

事先为重复的问题表示歉意,但是我还没有找到可以解决先前问题的解决方案。

我无法将具有不同MultiIndexes的两个数据框合并在一起。我要保留两个数据框中的所有列。

鉴于df1拥有约30万行,而df2拥有约50k行,则在df1:df2之间的连接将是很多:1。

df1                  B  path_id
cust_id date                   
11      2015-02-24  10       13
28      2015-02-25  16       22
23      2015-02-26  21       19
15      2015-02-27  11       28
18      2015-02-28  29       10


df2               C
cust_id path_id    
11      13       10
28      22       26
23      19       22
15      28       27
18      10       18

目标是将列C分配给索引cust_id和列path_id的所有匹配组合。参见下面的df3。

df3                     B   C  path_id
cust_id date                       
11      2015-02-24  10  10       13
28      2015-02-25  16  26       22
23      2015-02-26  21  22       19
15      2015-02-27  11  27       28
18      2015-02-28  29  18       10

对此表示赞赏。谢谢!

3 个答案:

答案 0 :(得分:1)

好吧,我知道了。我不确定这是否是最好的方法,但是我只是重置两个数据帧的索引并合并到列上。参见下面的代码。

df1.reset_index()
df2.reset_index()
df3 = df1.merge(df2, on=['cust_id', 'path_id'])

然后我重新分配了索引。如果有更好的方法,请告诉我。

谢谢!

答案 1 :(得分:0)

尝试:

df1.reset_index('date').merge(df2, on=['cust_id','path_id'])

输出:

               date   b  path_id   c
cust_id                             
11       2015-02-24  10       13  10
28       2015-02-25  16       22  26
23       2015-02-26  21       19  22
15       2015-02-27  11       28  27
18       2015-02-28  29       10  18

答案 2 :(得分:0)

根据您的问题我能理解的是,这两个选项可以为您提供帮助。

  1. 以下代码将基于两个索引(即cust_id和path_id)执行完全(内部)合并,并将其余数据存储为数据帧的列。
df3 = pd.merge(df1, df2,on=["cust_id", "path_id"])
  1. 以下代码将执行上述操作,并使列(cust_id)成为新数据帧的索引。
df3 = pd.merge(df1, df2,on=["cust_id", "path_id"]).set_index('cust_id')