def set_index(self, indexes=None, append=False, inplace=None,
                  **indexes_kwargs):
        """Set DataArray (multi-)indexes using one or more existing
        coordinates.

        Parameters
        ----------
        indexes : {dim: index, ...}
            Mapping from names matching dimensions and values given
            by (lists of) the names of existing coordinates or variables to set
            as new (multi-)index.
        append : bool, optional
            If True, append the supplied index(es) to the existing index(es).
            Otherwise replace the existing index(es) (default).
        inplace : bool, optional
            If True, set new index(es) in-place. Otherwise, return a new
            DataArray object.
        **indexes_kwargs: optional
            The keyword arguments form of ``indexes``.
            One of indexes or indexes_kwargs must be provided.

        Returns
        -------
        obj : DataArray
            Another dataarray, with this data but replaced coordinates.

        See Also
        --------
        DataArray.reset_index
        """
        inplace = _check_inplace(inplace)
        indexes = either_dict_or_kwargs(indexes, indexes_kwargs, 'set_index')
        coords, _ = merge_indexes(indexes, self._coords, set(), append=append)
        if inplace:
            self._coords = coords
        else:
            return self._replace(coords=coords)