class_docstr: Apply a transformer columnwise to multivariate series.
  
  Overview: input multivariate time series and the transformer passed
  in `transformer` parameter is applied to specified `columns`, each
  column is handled as a univariate series. The resulting transformed
  data has the same shape as input data.
  
  Parameters
  ----------
  transformer : Estimator
      scikit-learn-like or sktime-like transformer to fit and apply to series.
  columns : list of str or None
          Names of columns that are supposed to be transformed.
          If None, all columns are transformed.
  
  Attributes
  ----------
  transformers_ : dict of {str : transformer}
      Maps columns to transformers.
  columns_ : list of str
      Names of columns that are supposed to be transformed.
  
  See Also
  --------
  OptionalPassthrough
  
  Examples
  --------
  >>> from sktime.datasets import load_longley
  >>> from sktime.transformations.series.detrend import Detrender
  >>> from sktime.transformations.compose import ColumnwiseTransformer
  >>> _, X = load_longley()
  >>> transformer = ColumnwiseTransformer(Detrender())
  >>> Xt = transformer.fit_transform(X)
docstr: Logic used by `inverse_transform` to reverse transformation on `X`.
  
  Returns an inverse-transformed version of X by iterating over specified
  columns and applying the univariate series transformer to them.
  Only works if `self.transformer` has an `inverse_transform` method.
  
  Parameters
  ----------
  X : pd.DataFrame
      Data to be inverse transformed
  y : Series or Panel, default=None
      Additional data, e.g., labels for transformation
  
  Returns
  -------
  Xt : pd.DataFrame
      inverse transformed version of X
docstr_tok: ["Logic","used","by","`","inverse_transform","`","to","reverse","transformation","on","`","X","`",".","Returns","an","inverse-transformed","version","of","X","by","iterating","over","specified","columns","and","applying","the","univariate","series","transformer","to","them",".","Only","works","if","`","self.transformer","`","has","an","`","inverse_transform","`","method",".","Parameters","--","--","--","--","--","X",":","pd.DataFrame","Data","to","be","inverse","transformed","y",":","Series","or","Panel",",","default=None","Additional","data",",","e.g.",",","labels","for","transformation","Returns","--","--","--","-","Xt",":","pd.DataFrame","inverse","transformed","version","of","X"]
code: def _inverse_transform(self, X, y=None):
      """Logic used by `inverse_transform` to reverse transformation on `X`.
  
      Returns an inverse-transformed version of X by iterating over specified
      columns and applying the univariate series transformer to them.
      Only works if `self.transformer` has an `inverse_transform` method.
  
      Parameters
      ----------
      X : pd.DataFrame
          Data to be inverse transformed
      y : Series or Panel, default=None
          Additional data, e.g., labels for transformation
  
      Returns
      -------
      Xt : pd.DataFrame
          inverse transformed version of X
      """
      # make copy of z
      X = X.copy()
  
      # make sure z contains all columns that the user wants to transform
      _check_columns(X, selected_columns=self.columns_)
  
      # iterate over columns that are supposed to be inverse_transformed
      for colname in self.columns_:
          X[colname] = self.transformers_[colname].inverse_transform(
              X[colname], y
          )
  
      return X
  
imports: import pandas
  from sktime.base._meta import _ColumnEstimator, _HeterogenousMetaEstimator
  from sktime.transformations.base import BaseTransformer
  from sktime.utils.multiindex import rename_multiindex
  from sktime.utils.validation.series import check_series
label_desc: Use image node_id 4 for calling the ColumnwiseTransformer obj's underlying member method code with example usage: obj._inverse_transform(X, y) and returns: X