class_docstr: Compute one or more top-N metrics over recommendation lists.
  
  This method groups the recommendations by the specified columns,
  and computes the metric over each group.  The default set of grouping
  columns is all columns *except* the following:
  
  * ``item``
  * ``rank``
  * ``score``
  * ``rating``
  
  The truth frame, ``truth``, is expected to match over (a subset of) the
  grouping columns, and contain at least an ``item`` column.  If it also
  contains a ``rating`` column, that is used as the users' rating for
  metrics that require it; otherwise, a rating value of 1 is assumed.
  
  Args:
      group_cols(list):
          The columns to group by, or ``None`` to use the default.
code: def _number_recs(self, recs, truth_key, rec_key, t_ident):
      _log.info("numbering rec lists")
      rec_df = recs[rec_key].drop_duplicates()
      rec_df["LKRecID"] = np.arange(len(rec_df))
      rec_df = pd.merge(rec_df, t_ident, on=truth_key, how="left")
      recs = pd.merge(rec_df, recs, on=rec_key).drop(columns=rec_key)
  
      return rec_df, recs
  
file_path: lkpy/lenskit/topn.py
imports: import logging
  import functools
  import numpy
  import pandas
  from .metrics.topn import *
  from .util import Stopwatch
label_desc: Use image node_id 5 for calling the RecListAnalysis obj's underlying member method code with example usage: obj._number_recs(recs, truth_key, rec_key, t_ident) and returns: rec_df,  recs