docs: def sortby(self, variables, ascending=True):
          """
          Sort object by labels or values (along an axis).
  
          Sorts the dataset, either along specified dimensions,
          or according to values of 1-D dataarrays that share dimension
          with calling object.
  
          If the input variables are dataarrays, then the dataarrays are aligned
          (via left-join) to the calling object prior to sorting by cell values.
          NaNs are sorted to the end, following Numpy convention.
  
          If multiple sorts along the same dimension is
          given, numpy's lexsort is performed along that dimension:
          https://docs.scipy.org/doc/numpy/reference/generated/numpy.lexsort.html
          and the FIRST key in the sequence is used as the primary sort key,
          followed by the 2nd key, etc.
  
          Parameters
          ----------
          variables: str, DataArray, or list of either
              1D DataArray objects or name(s) of 1D variable(s) in
              coords/data_vars whose values are used to sort the dataset.
          ascending: boolean, optional
              Whether to sort by ascending or descending order.
  
          Returns
          -------
          sorted: Dataset
              A new dataset where all the specified dims are sorted by dim
              labels.
          """
          from .dataarray import DataArray
  
          if not isinstance(variables, list):
              variables = [variables]
          else:
              variables = variables
          variables = [v if isinstance(v, DataArray) else self[v]
                       for v in variables]
          aligned_vars = align(self, *variables, join='left')
          aligned_self = aligned_vars[0]
          aligned_other_vars = aligned_vars[1:]
          vars_by_dim = defaultdict(list)
          for data_array in aligned_other_vars:
              if data_array.ndim != 1:
                  raise ValueError("Input DataArray is not 1-D.")
              if (data_array.dtype == object and
                      LooseVersion(np.__version__) < LooseVersion('1.11.0')):
                  raise NotImplementedError(
                      'sortby uses np.lexsort under the hood, which requires '
                      'numpy 1.11.0 or later to support object data-type.')
              (key,) = data_array.dims
              vars_by_dim[key].append(data_array)
  
          indices = {}
          for key, arrays in vars_by_dim.items():
              order = np.lexsort(tuple(reversed(arrays)))
              indices[key] = order if ascending else order[::-1]
          return aligned_self.isel(**indices)