code: def unique_value_groups(ar, sort=True):
      
      inverse, values = pd.factorize(ar, sort=sort)
      groups = [[] for _ in range(len(values))]
      for n, g in enumerate(inverse):
          if g >= 0:
              # pandas uses -1 to mark NaN, but doesn't include them in values
              groups[g].append(n)
      return values, groups
docs: Group an array by its unique values.
  
      Parameters
      ----------
      ar : array-like
          Input array. This will be flattened if it is not already 1-D.
      sort : boolean, optional
          Whether or not to sort unique values.
  
      Returns
      -------
      values : np.ndarray
          Sorted, unique values as returned by `np.unique`.
      indices : list of lists of int
          Each element provides the integer indices in `ar` with values given by
          the corresponding value in `unique_values`.