対称的な違いを見つけるというあなたのアプローチが進むべき道だと思います。
In [97]: from numpy import random
In [98]: arrays1 = [['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'],
....: ['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']]
In [99]: arrays2 = [['bar', 'baz', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'], [
....: 'one', 'one', 'two', 'three', 'one', 'two', 'one', 'three']]
In [100]: tuples1 = zip(*arrays1)
In [101]: tuples2 = zip(*arrays2)
In [102]: index1 = MultiIndex.from_tuples(tuples1, names=['first', 'second'])
In [103]: index2 = MultiIndex.from_tuples(tuples2, names=['first', 'second'])
In [104]: df1 = pd.DataFrame(random.randn(8, 2), index=index1)
In [105]: df2 = pd.DataFrame(random.randn(8, 2), index=index2)
In [106]: df1
Out[106]:
0 1
first second
bar one 0.613378 -0.400247
baz one -3.005834 0.004879
two 0.066539 -0.289100
three -0.020099 0.644226
foo one -0.461458 -1.621812
two 0.286655 0.110588
qux one 0.363648 -0.271281
three 1.707787 -1.832602
In [107]: df2
Out[107]:
0 1
first second
bar one -1.010482 -0.023373
baz one -0.040335 1.553905
two -0.080283 -0.571686
three -0.985722 -0.795481
foo one 0.623122 2.124316
two -0.493333 -0.343462
qux one -1.346753 -1.343945
three -0.053497 -0.382402
In [108]: sym_diff = (df1.index - df2.index).union(df2.index - df1.index)
In [109]: sym_diff
Out[109]:
MultiIndex
[(u'baz', u'three'), (u'qux', u'three')]
MultiIndex に対称差分法がない理由がわかりません。