I have a multindex DataFrame, df:
arrays = [['bar', 'bar', 'baz', 'baz', 'baz', 'baz', 'foo', 'foo'],
['one', 'two', 'one', 'two', 'three', 'four', 'one', 'two']]
df = pd.DataFrame(np.ones([8, 4]), index=arrays)
which looks like:
0 1 2 3
bar one 1.0 1.0 1.0 1.0
two 1.0 1.0 1.0 1.0
baz one 1.0 1.0 1.0 1.0
two 1.0 1.0 1.0 1.0
three 1.0 1.0 1.0 1.0
four 1.0 1.0 1.0 1.0
foo one 1.0 1.0 1.0 1.0
two 1.0 1.0 1.0 1.0
I now need to sort the 'baz' sub-level into a new order, to create something that looks like df_end:
arrays_end = [['bar', 'bar', 'baz', 'baz', 'baz', 'baz', 'foo', 'foo'],
['one', 'two', 'two', 'four', 'three', 'one', 'one', 'two']]
df_end = pd.DataFrame(np.ones([8, 4]), index=arrays_end)
which looks like:
0 1 2 3
bar one 1.0 1.0 1.0 1.0
two 1.0 1.0 1.0 1.0
baz two 1.0 1.0 1.0 1.0
four 1.0 1.0 1.0 1.0
three 1.0 1.0 1.0 1.0
one 1.0 1.0 1.0 1.0
foo one 1.0 1.0 1.0 1.0
two 1.0 1.0 1.0 1.0
I thought that I might be able to reindex the baz row:
new_index = ['two','four','three','one']
df.loc['baz'].reindex(new_index)
Which gives:
0 1 2 3
two 1.0 1.0 1.0 1.0
four 1.0 1.0 1.0 1.0
three 1.0 1.0 1.0 1.0
one 1.0 1.0 1.0 1.0
...and insert these values back into the original DataFrame:
df.loc['baz'] = df.loc['baz'].reindex(new_index)
But the result is:
0 1 2 3
bar one 1.0 1.0 1.0 1.0
two 1.0 1.0 1.0 1.0
baz one NaN NaN NaN NaN
two NaN NaN NaN NaN
three NaN NaN NaN NaN
four NaN NaN NaN NaN
foo one 1.0 1.0 1.0 1.0
two 1.0 1.0 1.0 1.0
Which is not what I'm looking for! So my question is how I can use new_index to reorder the rows in the baz index. Any advice would be greatly appreciated.
