合并单级MultiIndex

Joh*_*man 28 python pandas

有没有办法在不重置索引的情况下合并MultiIndex的单个级别?

我有一个时间不变值的"静态"表,由ObjectID索引,我有一个时变字段的"动态"表,由ObjectID + Date索引.我想一起加入这些表格.

现在,我能想到的最好的是:

dynamic.reset_index().merge(static, left_on=['ObjectID'], right_index=True)
Run Code Online (Sandbox Code Playgroud)

但是,动态表非常大,我不想为了合并这些值而不得不使用它的索引.

joe*_*lom 19

是的,因为pandas 0.14.0,现在可以将单索引的DataFrame与多索引DataFrame的级别合并使用.join.

df1.join(df2, how='inner') # how='outer' keeps all records from both data frames
Run Code Online (Sandbox Code Playgroud)

0.14 pandas docs将其描述为等效但更高效且速度更快:

merge(df1.reset_index(),
      df2.reset_index(),
      on=['index1'],
      how='inner'
     ).set_index(['index1','index2'])
Run Code Online (Sandbox Code Playgroud)

文档还提到.join不能用于在单个级别上合并两个多索引DataFrame ,也不能用于上一个问题的GitHub跟踪器讨论,看起来这可能不是优先实现:

所以我合并了单一联接,见#6363; 以及一些关于如何进行多重连接的文档.实际实施起来相当复杂.和恕我直言,不值得努力,因为它真的不会更改内存使用/速度.

但是,有关于此的GitHub对话,其中有一些最近的开发https://github.com/pydata/pandas/issues/6360.通过重置前面提到的和文档中描述的索引也可以实现这一点.

  • nvm,[docs](http://pandas.pydata.org/pandas-docs/stable/merging.html#joining-a-single-index-to-a-multi-index) 说它基于与单级索引同名的索引级别。 (3认同)
  • 对于您的第一个示例,您如何选择用于连接的 MultiIndex 级别? (2认同)