Python 当只有一级索引用作键时,熊猫与多索引合并

Python 当只有一级索引用作键时,熊猫与多索引合并,python,pandas,merge,multi-index,Python,Pandas,Merge,Multi Index,我有一个名为df1的数据帧,它有一个2级多索引(级别:“'u Date'和'u'ItemId')。“\u ItemId”的每个值都有多个实例,如下所示: _SomeOtherLabel _Date _ItemId 2014-10-05 6588921 AA 6592520 AB 6836143

我有一个名为df1的数据帧,它有一个2级多索引(级别:“'u Date'和'u'ItemId')。“\u ItemId”的每个值都有多个实例,如下所示:

                              _SomeOtherLabel
 _Date            _ItemId     
 2014-10-05       6588921     AA
                  6592520     AB 
                  6836143     BA
 2014-10-11       6588921     CA
                  6592520     CB
                  6836143     DA 
我有一个名为df2的第二个数据帧,其中的“\u ItemId”用作键(而不是索引)。在此df中,\ u ItemId的每个值只出现一次:

                  _ItemId       _Cat
  0               6588921       6_1
  1               6592520       6_1
  2               6836143       7_1
我想从df2中恢复列“\u Cat”中的值,并将它们合并到df1中以获得适当的“\u ItemId”值。这几乎是(我想?)一个标准的多对一合并,除了左df的适当键是多索引级别之一之外。我试过这个:

df1['_cat']=pd.merge(df1,df2,left_index=True, right_on='ItemId')  
但是我得到了错误

   "ValueError: len(right_on) must equal the number of levels in the index of "left"
我认为这是有意义的,因为我的(左)索引实际上是由两个键组成的。如何选择所需的一个索引级别?还是有更好的合并方法


谢谢

我可以想出两种方法

使用和:

或者使用
reset\u index()
merge()
,然后设置新的多索引

我认为第一种方法应该更快,但不确定

>>> df1.join(df2.set_index('_ItemId'))
                   _SomeOtherLabel _Cat
_Date      _ItemId                     
2014-10-05 6588921              AA  6_1
           6592520              AB  6_1
           6836143              BA  7_1
2014-10-11 6588921              CA  6_1
           6592520              CB  6_1
           6836143              DA  7_1