Python 使用不同的多索引连接或合并数据帧
对于重复的问题,我提前表示歉意,但我还没有找到一个与前面问题相同的解决方案 我无法使用不同的多索引连接两个数据帧。我想保留两个数据帧中的所有列 假设df1有大约300k行,而df2有大约50k行,那么df1:df2之间的连接将是多:1Python 使用不同的多索引连接或合并数据帧,python,pandas,dataframe,multi-index,Python,Pandas,Dataframe,Multi Index,对于重复的问题,我提前表示歉意,但我还没有找到一个与前面问题相同的解决方案 我无法使用不同的多索引连接两个数据帧。我想保留两个数据帧中的所有列 假设df1有大约300k行,而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
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\u id
和列path\u 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
感谢对此的任何回应。谢谢大家! 我想出来了。我不确定这是否是最好的方法,但我只是重置了两个数据帧的索引并合并到列上。请参阅下面的代码
df1.reset_index()
df2.reset_index()
df3 = df1.merge(df2, on=['cust_id', 'path_id'])
然后我重新分配了索引。如果有更好的办法,请告诉我
谢谢 试试看:
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
根据我对你的问题的理解,以下两个选项可以帮助你
如果您用您的结构创建了一些虚拟数据帧,然后还显示了预期的输出,这将非常有帮助。谢谢你的建议。我已经更新了帖子。因为你的索引级别似乎有名字,你可以在“客户id”上使用更多。尝试
df1.merge(df2,on=['cust\u id','path\u id'])
yes。这是一种方法。我在下面发布了一个解决方案,您不必在两个数据帧上都执行索引级别。谢谢。我相信我的公司使用的是熊猫的旧版本,我不能加入索引。当我尝试将索引标签放入联接数组时,它返回的结果是该列不存在。@W.Powell我确实记得这是旧版本pandas的一个问题。出于好奇,你正在运行什么版本的熊猫?pd.\uuuuuuu版本\uuuuuu=0.25.1
df3 = pd.merge(df1, df2,on=["cust_id", "path_id"])
df3 = pd.merge(df1, df2,on=["cust_id", "path_id"]).set_index('cust_id')