docstr: Adapter for Pandas DataFrames in wide format, where multiple columns contain different time series for
  the same id.
  
  :param df: the data frame
  :type df: pd.DataFrame
  
  :param column_id: the name of the column containing time series group ids
  :type column_id: str
  
  :param column_sort: the name of the column to sort on
  :type column_sort: str|None
  
  :param value_columns: list of column names to treat as time series values.
      If `None` or empty, all columns except `column_id` and `column_sort` will be used.
  :type value_columns: list[str]|None
code: def __init__(
      self, df, column_id, column_sort=None, value_columns=None
  ):
      """
      Adapter for Pandas DataFrames in wide format, where multiple columns contain different time series for
      the same id.
  
      :param df: the data frame
      :type df: pd.DataFrame
  
      :param column_id: the name of the column containing time series group ids
      :type column_id: str
  
      :param column_sort: the name of the column to sort on
      :type column_sort: str|None
  
      :param value_columns: list of column names to treat as time series values.
          If `None` or empty, all columns except `column_id` and `column_sort` will be used.
      :type value_columns: list[str]|None
      """
      if column_id is None:
          raise ValueError("A value for column_id needs to be supplied")
  
      _check_nan(df, column_id)
  
      if not value_columns:
          value_columns = _get_value_columns(df, column_id, column_sort)
  
      _check_nan(df, *value_columns)
      _check_colname(*value_columns)
  
      self.value_columns = value_columns
  
      if column_sort is not None:
          _check_nan(df, column_sort)
  
      self.column_sort = column_sort
      self.df_grouped = df.groupby(column_id)
  
      super().__init__(df, column_id)
  
imports: import itertools
  from collections import defaultdict, namedtuple
  from typing import Iterable, Sized
  import pandas
label_desc: Use image node_id 1 to create a new WideTsFrameAdapter object from inherited base classes: PartitionedTsData with example: obj = WideTsFrameAdapter(df, column_id, column_sort, value_columns)