Python 为什么熊猫多索引合并会出现关键错误?

Python 为什么熊猫多索引合并会出现关键错误?,python,pandas,merge,Python,Pandas,Merge,我的问题与这里描述的完全相同: 当使用建议的解决方案时,我得到了一个关键错误 我使用的是pandas版本=0.20.1(该代码至少适用于0.23.0及以上版本) 有没有办法和这个版本合并?谢谢你的帮助 import pandas as pd import numpy as np arrays = [['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'], ['one', 'two', 'one', 'two

我的问题与这里描述的完全相同:

当使用建议的解决方案时,我得到了一个关键错误

我使用的是pandas版本=0.20.1(该代码至少适用于0.23.0及以上版本)

有没有办法和这个版本合并?谢谢你的帮助

import pandas as pd
import numpy as np



arrays = [['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'],
            ['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']]
tuples = list(zip(*arrays))
index1 = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])
index2 = pd.MultiIndex.from_tuples(tuples, names=['third', 'fourth'])


s1 = pd.DataFrame(np.random.randn(8), index=index1, columns=['s1'])
s2 = pd.DataFrame(np.random.randn(8), index=index2, columns=['s2'])



s1.merge(s2, left_index=True, right_on=['third', 'fourth']) 
提交此代码时的错误消息如下:


keyrerror回溯(最近一次调用)
get\U loc中的C:\Users\User\u Name\AppData\Local\Continuum\Anaconda3\lib\site packages\pandas\core\index\base.py(self、key、method、tolerance)
2392请尝试:
->2393自动返回发动机。获取位置(钥匙)
2394键错误除外:
熊猫\\u libs\index.pyx在熊猫中。\ u libs.index.IndexEngine.get\u loc(熊猫\\u libs\index.c:5239)()
熊猫\\u libs\index.pyx在熊猫中。\ u libs.index.IndexEngine.get\u loc(熊猫\\u libs\index.c:5085)()
pandas\\ libs\hashtable\类\助手.pxi在pandas.\ libs.hashtable.PyObjectHashTable.get\项中(pandas\\ libs\hashtable.c:20405)()
pandas\\ libs\hashtable\类\助手.pxi在pandas.\ libs.hashtable.PyObjectHashTable.get\项中(pandas\\ libs\hashtable.c:20359)()
KeyError:“第三个”
在处理上述异常期间,发生了另一个异常:
KeyError回溯(最近一次呼叫最后一次)
在()
17
18
--->19 s1.合并(s2,左索引=真,右索引=第三、四)
合并中的C:\Users\User\u Name\AppData\Local\Continuum\Anaconda3\lib\site packages\pandas\core\frame.py(self、right、how、on、left\u on、right\u on、left\u index、right\u index、sort、后缀、copy、indicator)
4818右上=右上,左索引=左索引,
4819右索引=右索引,排序=排序,后缀=后缀,
->4820副本=副本,指标=指标)
4821
4822 def四舍五入(自身,小数=0,*args,**kwargs):
合并中的C:\Users\User\u Name\AppData\Local\Continuum\Anaconda3\lib\site packages\pandas\core\remode\merge.py(左、右、如何、开、左、右、左索引、右索引、排序、后缀、副本、指示器)
51右上=右上,左索引=左索引,
52右索引=右索引,排序=排序,后缀=后缀,
--->53复制=复制,指标=指标)
54返回操作获取结果()
55
C:\Users\User\u Name\AppData\Local\Continuum\Anaconda3\lib\site packages\pandas\core\remode\merge.py in\uuuuuuu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
556(自动左键连接键,
557自动右键连接键,
-->558 self.join\u names)=self.\u get\u merge\u keys()
559
560#验证合并键数据类型。我们可能需要强制
C:\Users\User\u Name\AppData\Local\Continuum\Anaconda3\lib\site packages\pandas\core\remode\merge.py in\u get\u merge\u keys(self)
847联接名称。附加(无)
848其他:
-->849右键。追加(右[k]。\u值)
850连接名称。附加(k)
851如果存在(自左索引、多索引):
C:\Users\User\u Name\AppData\Local\Continuum\Anaconda3\lib\site packages\pandas\core\frame.py in\uuuuuuu getitem\uuuuuu(self,key)
2060返回自我。\u获取项目\u多级(键)
2061其他:
->2062返回自我。\u获取项目\u列(键)
2063
2064 def_getitem_列(自身,键):
C:\Users\User\u Name\AppData\Local\Continuum\Anaconda3\lib\site packages\pandas\core\frame.py在\u getitem\u列中(self,key)
2067#获取列
2068如果self.columns.u是唯一的:
->2069返回自。\u获取\u项目\u缓存(密钥)
2070
2071#重复列和可能的降维
C:\Users\User\u Name\AppData\Local\Continuum\Anaconda3\lib\site packages\pandas\core\generic.py在\u get\u item\u缓存中(self,item)
1532 res=cache.get(项)
1533如果res为无:
->1534 values=self.\u data.get(项目)
1535 res=自身。_框_项_值(项,值)
1536缓存[项目]=res
get中的C:\Users\User\u Name\AppData\Local\Continuum\Anaconda3\lib\site packages\pandas\core\internals.py(self、item、fastpath)
3588
3589如果不为空(项目):
->3590 loc=自身物品。获取loc(物品)
3591其他:
3592 indexer=np.arange(len(self.items))[isnull(self.items)]
get\U loc中的C:\Users\User\u Name\AppData\Local\Continuum\Anaconda3\lib\site packages\pandas\core\index\base.py(self、key、method、tolerance)
2393自动返回发动机。获取位置(钥匙)
2394键错误除外:
->2395返回self.\u引擎。获取self.\u loc(self.\u可能\u cast\u索引器(键))
2396
2397 indexer=self.get\u indexer([key],method=method,tolerance=tolerance)
熊猫\\u libs\index.pyx在熊猫中。\ u libs.index.IndexEngine.get\u loc(熊猫\\u libs\index.c:5239)()
熊猫\\u libs\index.pyx在熊猫中。\ u libs.index.IndexEngine.get\u loc(熊猫\\u libs\index.c:5085)()
pandas\\ libs\hashtable\类\助手.pxi在pandas.\ libs.hashtable.PyObjectHashTable.get\项中(pandas\\ libs\hashtable.c:20405)()
pandas\\ libs\hashtable\类\助手.pxi在pandas.\ libs.hashtable.PyObjectHashTable.get\项中(pandas\\ libs\hashtable.c:20359)()
KeyError:“第三个”

查看您链接到的问题,我找到了第二个答案,建议使用(链接是特意链接到0.20.1版)。 我已降级到0.20.1并尝试了以下操作:

s1.combine_first(s2)
导致:

                s1          s2
first   second      
bar     one     -1.123232   0.583474
        two     -1.833575   -0.302260
baz     one     0.819698    -0.838815
        two     0.739158    -0.330437
foo     one     -0.349963   -0.643944
        two     0.777818    -0.813335
qux     one     -0.340510   -0.121563
        two     -0.519903   -0.014662

这是您想要的结果。

查看您链接到的问题,我找到了第二个答案,建议使用(链接是特意链接到0.20.1版)。 我已降级到0.20.1并尝试了以下操作:

s1.combine_first(s2)
导致:

                s1          s2
first   second      
bar     one     -1.123232   0.583474
        two     -1.833575   -0.302260
baz     one     0.819698    -0.838815
        two     0.739158    -0.330437
foo     one     -0.349963   -0.643944
        two     0.777818    -0.813335
qux     one     -0.340510   -0.121563
        two     -0.519903   -0.014662
这是你想要的结果