code: def ngroup(self, ascending=True):
          
  
          with _group_selection_context(self):
              index = self._selected_obj.index
              result = Series(self.grouper.group_info[0], index)
              if not ascending:
                  result = self.ngroups - 1 - result
              return result
docs: Number each group from 0 to the number of groups - 1.
  
          This is the enumerative complement of cumcount.  Note that the
          numbers given to the groups match the order in which the groups
          would be seen when iterating over the groupby object, not the
          order they are first observed.
  
          .. versionadded:: 0.20.2
  
          Parameters
          ----------
          ascending : bool, default True
              If False, number in reverse, from number of group - 1 to 0.
  
          See Also
          --------
          .cumcount : Number the rows in each group.
  
          Examples
          --------
  
          >>> df = pd.DataFrame({"A": list("aaabba")})
          >>> df
             A
          0  a
          1  a
          2  a
          3  b
          4  b
          5  a
          >>> df.groupby('A').ngroup()
          0    0
          1    0
          2    0
          3    1
          4    1
          5    0
          dtype: int64
          >>> df.groupby('A').ngroup(ascending=False)
          0    1
          1    1
          2    1
          3    0
          4    0
          5    1
          dtype: int64
          >>> df.groupby(["A", [1,1,2,3,2,1]]).ngroup()
          0    0
          1    0
          2    1
          3    3
          4    2
          5    0
          dtype: int64