class_docstr: A Grouper allows the user to specify a groupby instruction for a target
  object
  
  This specification will select a column via the key parameter, or if the
  level and/or axis parameters are given, a level of the index of the target
  object.
  
  These are local specifications and will override 'global' settings,
  that is the parameters axis and level which are passed to the groupby
  itself.
  
  Parameters
  ----------
  key : string, defaults to None
      groupby key, which selects the grouping column of the target
  level : name/number, defaults to None
      the level for the target index
  freq : string / frequency object, defaults to None
      This will groupby the specified frequency if the target selection
      (via key or level) is a datetime-like object. For full specification
      of available frequencies, please see `here
      <http://pandas.pydata.org/pandas-docs/stable/timeseries.html#offset-aliases>`_.
  axis : number/name of the axis, defaults to 0
  sort : boolean, default to False
      whether to sort the resulting labels
  
  additional kwargs to control time-like groupers (when `freq` is passed)
  
  closed : closed end of interval; 'left' or 'right'
  label : interval boundary to use for labeling; 'left' or 'right'
  convention : {'start', 'end', 'e', 's'}
      If grouper is PeriodIndex
  base, loffset
  
  Returns
  -------
  A specification for a groupby instruction
  
  Examples
  --------
  
  Syntactic sugar for ``df.groupby('A')``
  
  >>> df.groupby(Grouper(key='A'))
  
  Specify a resample operation on the column 'date'
  
  >>> df.groupby(Grouper(key='date', freq='60s'))
  
  Specify a resample operation on the level 'date' on the columns axis
  with a frequency of 60s
  
  >>> df.groupby(Grouper(level='date', freq='60s', axis=1))
docstr: Parameters
  ----------
  obj : the subject object
  validate : boolean, default True
      if True, validate the grouper
  
  Returns
  -------
  a tuple of binner, grouper, obj (possibly sorted)
code: def _get_grouper(self, obj, validate=True):
      """
      Parameters
      ----------
      obj : the subject object
      validate : boolean, default True
          if True, validate the grouper
  
      Returns
      -------
      a tuple of binner, grouper, obj (possibly sorted)
      """
  
      self._set_grouper(obj)
      self.grouper, exclusions, self.obj = _get_grouper(
          self.obj,
          [self.key],
          axis=self.axis,
          level=self.level,
          sort=self.sort,
          validate=validate,
      )
      return self.binner, self.grouper, self.obj
  
imports: import warnings
  import numpy
  import pandas.compat
  from pandas.compat import callable, zip
  from pandas.util._decorators import cache_readonly
  from pandas.core.dtypes.common import ensure_categorical, is_categorical_dtype, is_datetime64_dtype, is_hashable, is_list_like, is_scalar, is_timedelta64_dtype
  from pandas.core.dtypes.generic import ABCSeries
  import pandas.core.algorithms
  from pandas.core.arrays import Categorical, ExtensionArray
  import pandas.core.common
  from pandas.core.frame import DataFrame
  from pandas.core.groupby.ops import BaseGrouper
  from pandas.core.index import CategoricalIndex, Index, MultiIndex
  from pandas.core.series import Series
  from pandas.io.formats.printing import pprint_thing
label_desc: Use image node_id 4 for calling the Grouper obj's underlying member method code with example usage: obj._get_grouper(obj, validate) and returns: self,  self,  self