Cha*_*les 6 python merge multi-index pandas
我有一个名为 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
Run Code Online (Sandbox Code Playgroud)
我有一个名为 df2 的第二个数据框,其中 '_ItemId' 用作键(不是索引)。在这个 df 中,_ItemId 的每个值只出现一次:
_ItemId _Cat
0 6588921 6_1
1 6592520 6_1
2 6836143 7_1
Run Code Online (Sandbox Code Playgroud)
我想从 df2 中恢复“_Cat”列中的值,并将它们合并到 df1 中以获取“_ItemId”的适当值。这几乎是(我认为?)标准的多对一合并,除了左侧 df 的适当键是 MultiIndex 级别之一。我试过这个:
df1['_cat']=pd.merge(df1,df2,left_index=True, right_on='ItemId')
Run Code Online (Sandbox Code Playgroud)
但我得到了错误
"ValueError: len(right_on) must equal the number of levels in the index of "left"
Run Code Online (Sandbox Code Playgroud)
我认为这是有道理的,因为我的(左)索引实际上是由两个键组成的。如何选择我需要的一个索引级别?或者有没有更好的方法来合并?
谢谢
我可以想到两种方法来做到这一点。
>>> 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
Run Code Online (Sandbox Code Playgroud)
或使用reset_index(),merge()然后设置新的多索引
我认为第一种方法应该更快,但不确定。
| 归档时间: |
|
| 查看次数: |
3814 次 |
| 最近记录: |