有没有办法在不重置索引的情况下合并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.通过重置前面提到的和文档中描述的索引也可以实现这一点.