def swaplevel(self, i=(- 2), j=(- 1), axis=0):
    '\n        Swap levels i and j in a MultiIndex on a particular axis\n\n        Parameters\n        ----------\n        i, j : int, str (can be mixed)\n            Level of index to be swapped. Can pass level name as string.\n\n        Returns\n        -------\n        swapped : same type as caller (new object)\n\n        .. versionchanged:: 0.18.1\n\n           The indexes ``i`` and ``j`` are now optional, and default to\n           the two innermost levels of the index.\n\n        '
    axis = self._get_axis_number(axis)
    result = self.copy()
    labels = result._data.axes[axis]
    result._data.set_axis(axis, labels.swaplevel(i, j))
    return result
Swap levels i and j in a MultiIndex on a particular axis

Parameters
----------
i, j : int, str (can be mixed)
    Level of index to be swapped. Can pass level name as string.

Returns
-------
swapped : same type as caller (new object)

.. versionchanged:: 0.18.1

   The indexes ``i`` and ``j`` are now optional, and default to
   the two innermost levels of the index.
def swaplevel(self, i=(- 2), j=(- 1), axis=0):
    '\n        Swap levels i and j in a MultiIndex on a particular axis\n\n        Parameters\n        ----------\n        i, j : int, str (can be mixed)\n            Level of index to be swapped. Can pass level name as string.\n\n        Returns\n        -------\n        swapped : same type as caller (new object)\n\n        .. versionchanged:: 0.18.1\n\n           The indexes ``i`` and ``j`` are now optional, and default to\n           the two innermost levels of the index.\n\n        '
    axis = self._get_axis_number(axis)
    result = self.copy()
    labels = result._data.axes[axis]
    result._data.set_axis(axis, labels.swaplevel(i, j))
    return result