code: def lreshape(data, groups, dropna=True, label=None):
      """
      Reshape long-format data to wide. Generalized inverse of DataFrame.pivot
  
      Parameters
      ----------
      data : DataFrame
      groups : dict
          {new_name : list_of_columns}
      dropna : boolean, default True
  
      Examples
      --------
      >>> data = pd.DataFrame({'hr1': [514, 573], 'hr2': [545, 526],
      ...                      'team': ['Red Sox', 'Yankees'],
      ...                      'year1': [2007, 2007], 'year2': [2008, 2008]})
      >>> data
         hr1  hr2     team  year1  year2
      0  514  545  Red Sox   2007   2008
      1  573  526  Yankees   2007   2008
  
      >>> pd.lreshape(data, {'year': ['year1', 'year2'], 'hr': ['hr1', 'hr2']})
            team  year   hr
      0  Red Sox  2007  514
      1  Yankees  2007  573
      2  Red Sox  2008  545
      3  Yankees  2008  526
  
      Returns
      -------
      reshaped : DataFrame
      """
      if isinstance(groups, dict):
          keys = list(groups.keys())
          values = list(groups.values())
      else:
          keys, values = zip(*groups)
  
      all_cols = list(set.union(*[set(x) for x in values]))
      id_cols = list(data.columns.difference(all_cols))
  
      K = len(values[0])
  
      for seq in values:
          if len(seq) != K:
              raise ValueError("All column lists must be same length")
  
      mdata = {}
      pivot_cols = []
  
      for target, names in zip(keys, values):
          to_concat = [data[col].values for col in names]
  
          import pandas.core.dtypes.concat as _concat
  
          mdata[target] = _concat._concat_compat(to_concat)
          pivot_cols.append(target)
  
      for col in id_cols:
          mdata[col] = np.tile(data[col].values, K)
  
      if dropna:
          mask = np.ones(len(mdata[pivot_cols[0]]), dtype=bool)
          for c in pivot_cols:
              mask &= notna(mdata[c])
          if not mask.all():
              mdata = {k: v[mask] for k, v in compat.iteritems(mdata)}
  
      return data._constructor(mdata, columns=id_cols + pivot_cols)
  
file_path: catboost/contrib/python/pandas/py2/pandas/core/reshape/melt.py
imports: import re
  import numpy
  from pandas.util._decorators import Appender
  from pandas.core.dtypes.common import is_extension_type, is_list_like
  from pandas.core.dtypes.generic import ABCMultiIndex
  from pandas.core.dtypes.missing import notna
  from pandas import compat
  from pandas.core.arrays import Categorical
  from pandas.core.frame import _shared_docs
  from pandas.core.indexes.base import Index
  from pandas.core.reshape.concat import concat
  from pandas.core.tools.numeric import to_numeric
label_desc: Use image node_id 2 for calling a global function with example usage: lreshape(data, groups, dropna, label) and returns: data