はい、pandas 0.14.0 以降、.join
.
df1.join(df2, how='inner') # how='outer' keeps all records from both data frames
0.14 pandas docsでは、これは同等であると説明されていますが、メモリ効率が高く、次のものよりも高速です。
merge(df1.reset_index(),
df2.reset_index(),
on=['index1'],
how='inner'
).set_index(['index1','index2'])
ドキュメント.join
には、1 つのレベルで 2 つのマルチインデックス データフレームをマージするために使用できないことも記載されており、前の問題の GitHub トラッカーの議論から、これは実装する優先事項ではないように思われます。
#6363 を参照してください。マルチマルチ結合を行う方法に関するいくつかのドキュメントとともに。実際に実装するのはかなり複雑です。IMHOは、メモリ使用量/速度をそれほど変更しないため、努力する価値はありません。
ただし、これに関する GitHub の会話があり、最近の開発https://github.com/pydata/pandas/issues/6360がありました。前述のようにインデックスをリセットし、ドキュメントにも記載されているように、これを達成することも可能です。
パンダ >= 0.24.0 の更新
マルチインデックスのデータ フレームを互いに結合できるようになりました。リリースノートによると:
index_left = pd.MultiIndex.from_tuples([('K0', 'X0'), ('K0', 'X1'),
('K1', 'X2')],
names=['key', 'X'])
left = pd.DataFrame({'A': ['A0', 'A1', 'A2'],
'B': ['B0', 'B1', 'B2']}, index=index_left)
index_right = pd.MultiIndex.from_tuples([('K0', 'Y0'), ('K1', 'Y1'),
('K2', 'Y2'), ('K2', 'Y3')],
names=['key', 'Y'])
right = pd.DataFrame({'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3']}, index=index_right)
left.join(right)
外:
A B C D
key X Y
K0 X0 Y0 A0 B0 C0 D0
X1 Y0 A1 B1 C0 D0
K1 X2 Y1 A2 B2 C1 D1
[3 rows x 4 columns]