code: def apply(self, func, axis=0, subset=None, **kwargs):
          
          self._todo.append((lambda instance: getattr(instance, '_apply'),
                             (func, axis, subset), kwargs))
          return self
docs: Apply a function column-wise, row-wise, or table-wise,
          updating the HTML representation with the result.
  
          Parameters
          ----------
          func : function
              ``func`` should take a Series or DataFrame (depending
              on ``axis``), and return an object with the same shape.
              Must return a DataFrame with identical index and
              column labels when ``axis=None``
          axis : {0 or 'index', 1 or 'columns', None}, default 0
              apply to each column (``axis=0`` or ``'index'``), to each row
              (``axis=1`` or ``'columns'``), or to the entire DataFrame at once
              with ``axis=None``.
          subset : IndexSlice
              a valid indexer to limit ``data`` to *before* applying the
              function. Consider using a pandas.IndexSlice
          kwargs : dict
              pass along to ``func``
  
          Returns
          -------
          self : Styler
  
          Notes
          -----
          The output shape of ``func`` should match the input, i.e. if
          ``x`` is the input row, column, or table (depending on ``axis``),
          then ``func(x).shape == x.shape`` should be true.
  
          This is similar to ``DataFrame.apply``, except that ``axis=None``
          applies the function to the entire DataFrame at once,
          rather than column-wise or row-wise.
  
          Examples
          --------
          >>> def highlight_max(x):
          ...     return ['background-color: yellow' if v == x.max() else ''
                          for v in x]
          ...
          >>> df = pd.DataFrame(np.random.randn(5, 2))
          >>> df.style.apply(highlight_max)