[英]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.