Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python/Pandas-当我有两个索引时在索引上合并_Python_Pandas - Fatal编程技术网

Python/Pandas-当我有两个索引时在索引上合并

Python/Pandas-当我有两个索引时在索引上合并,python,pandas,Python,Pandas,我有一个双索引的数据帧,它看起来像这样: bal: ano unit period business_id id 9564 302 2012 reais anual 303 2011 reais anual 2361 304 2013

我有一个双索引的数据帧,它看起来像这样:

bal:

                    ano             unit period
business_id id                                 
9564        302    2012            reais  anual
            303    2011            reais  anual
2361        304    2013            reais  anual
            305    2012            reais  anual
2369        306    2013            reais  anual
            307    2012            reais  anual
accounts:

                           A                     B
id                                                                      

302               5964168.52          1.097601e+07
303               5774707.15          1.086787e+07
304               3652575.31          6.608469e+06 
305                321076.15          6.027066e+06
306               3858137.49          9.733126e+06
                    ano             unit period              A                     B
business_id id                                 
9564        302    2012            reais  anual     5964168.52          1.097601e+07
            303    2011            reais  anual     5774707.15          1.086787e+07
2361        304    2013            reais  anual     3652575.31          6.608469e+06
            305    2012            reais  anual      321076.15          6.027066e+06
2369        306    2013            reais  anual     3858137.49          9.733126e+06 
bal=bal.merge(accounts,left_on='id', right_index=True)
我有另一个数据帧,看起来像这样:

bal:

                    ano             unit period
business_id id                                 
9564        302    2012            reais  anual
            303    2011            reais  anual
2361        304    2013            reais  anual
            305    2012            reais  anual
2369        306    2013            reais  anual
            307    2012            reais  anual
accounts:

                           A                     B
id                                                                      

302               5964168.52          1.097601e+07
303               5774707.15          1.086787e+07
304               3652575.31          6.608469e+06 
305                321076.15          6.027066e+06
306               3858137.49          9.733126e+06
                    ano             unit period              A                     B
business_id id                                 
9564        302    2012            reais  anual     5964168.52          1.097601e+07
            303    2011            reais  anual     5774707.15          1.086787e+07
2361        304    2013            reais  anual     3652575.31          6.608469e+06
            305    2012            reais  anual      321076.15          6.027066e+06
2369        306    2013            reais  anual     3858137.49          9.733126e+06 
bal=bal.merge(accounts,left_on='id', right_index=True)
我想合并它们,使它们看起来像这样:

bal:

                    ano             unit period
business_id id                                 
9564        302    2012            reais  anual
            303    2011            reais  anual
2361        304    2013            reais  anual
            305    2012            reais  anual
2369        306    2013            reais  anual
            307    2012            reais  anual
accounts:

                           A                     B
id                                                                      

302               5964168.52          1.097601e+07
303               5774707.15          1.086787e+07
304               3652575.31          6.608469e+06 
305                321076.15          6.027066e+06
306               3858137.49          9.733126e+06
                    ano             unit period              A                     B
business_id id                                 
9564        302    2012            reais  anual     5964168.52          1.097601e+07
            303    2011            reais  anual     5774707.15          1.086787e+07
2361        304    2013            reais  anual     3652575.31          6.608469e+06
            305    2012            reais  anual      321076.15          6.027066e+06
2369        306    2013            reais  anual     3858137.49          9.733126e+06 
bal=bal.merge(accounts,left_on='id', right_index=True)
我想做的是这样的:

bal:

                    ano             unit period
business_id id                                 
9564        302    2012            reais  anual
            303    2011            reais  anual
2361        304    2013            reais  anual
            305    2012            reais  anual
2369        306    2013            reais  anual
            307    2012            reais  anual
accounts:

                           A                     B
id                                                                      

302               5964168.52          1.097601e+07
303               5774707.15          1.086787e+07
304               3652575.31          6.608469e+06 
305                321076.15          6.027066e+06
306               3858137.49          9.733126e+06
                    ano             unit period              A                     B
business_id id                                 
9564        302    2012            reais  anual     5964168.52          1.097601e+07
            303    2011            reais  anual     5774707.15          1.086787e+07
2361        304    2013            reais  anual     3652575.31          6.608469e+06
            305    2012            reais  anual      321076.15          6.027066e+06
2369        306    2013            reais  anual     3858137.49          9.733126e+06 
bal=bal.merge(accounts,left_on='id', right_index=True)
但是,我认为synthax是不正确的,因为我得到了一个ValueError:

ValueError: len(right_on) must equal the number of levels in the index of "left"

有人能帮忙吗?

目前,无法在多索引的特定级别上加入。 只能对整个索引或按列进行联接

因此,在加入之前,您必须将
business\u id
从多索引中删除:

result = (bal.reset_index('business_id').join(accounts, how='inner')
          .set_index(['business_id'], append=True))

屈服

                  ano period   unit           A           B
id  business_id                                            
302 9564         2012  anual  reais  5964168.52  10976010.0
303 9564         2011  anual  reais  5774707.15  10867870.0
304 2361         2013  anual  reais  3652575.31   6608469.0
305 2361         2012  anual  reais   321076.15   6027066.0
306 2369         2013  anual  reais  3858137.49   9733126.0
灵感来自。添加
merge

bal.reset_index(['business_id','id']).merge(accounts, left_on = 'id', right_index= True).set_index(['id','business_id'])