繁体   English   中英

当仅将一级索引用作键时,pandas与MultiIndex合并

[英]pandas merge with MultiIndex, when only one level of index is to be used as key

我有一个名为df1的数据框,具有2级MultiIndex(级别:'_ Date'和_'ItemId')。 “ _ItemId”的每个值都有多个实例,如下所示:

                              _SomeOtherLabel
 _Date            _ItemId     
 2014-10-05       6588921     AA
                  6592520     AB 
                  6836143     BA
 2014-10-11       6588921     CA
                  6592520     CB
                  6836143     DA 

我有一个名为df2的第二个数据帧,其中'_ItemId'被用作键(而不是索引)。 在此df中,_ItemId的每个值仅出现一次:

                  _ItemId       _Cat
  0               6588921       6_1
  1               6592520       6_1
  2               6836143       7_1

我想从df2恢复“ _Cat”列中的值,并将它们合并到df1中以获取“ _ItemId”的适当值。 这几乎是(我认为?)标准的多对一合并,只是左df的适当键是MultiIndex级别之一。 我尝试了这个:

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"

我想这很有意义,因为我的(左)索引实际上是由两个键组成的。 如何选择所需的一个索引级别? 还是有一种更好的合并方法?

谢谢

我可以想到两种方法。

使用set_index()join()

>>> 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

或使用reset_index()merge()然后设置新的multiindex

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM