事先为重复的问题表示歉意,但是我还没有找到可以解决先前问题的解决方案。
我无法将具有不同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
对此表示赞赏。谢谢!
答案 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)
根据您的问题我能理解的是,这两个选项可以为您提供帮助。
- 以下代码将基于两个索引(即cust_id和path_id)执行完全(内部)合并,并将其余数据存储为数据帧的列。
df3 = pd.merge(df1, df2,on=["cust_id", "path_id"])
- 以下代码将执行上述操作,并使列(cust_id)成为新数据帧的索引。
df3 = pd.merge(df1, df2,on=["cust_id", "path_id"]).set_index('cust_id')