code: def dataframe_func(func: Callable):
      """Decorate function to use a DataFrame instead of multiple series (as argument).
  
      This decorator can be used for functions that need to work on a whole
      `pd.DataFrame`. It will convert the required series into a DataFrame using an
      **outer merge**.
  
      The function's prototype should be:
  
          func(df : pd.DataFrame, **kwargs)
              -> Union[np.ndarray, pd.Series, pd.DataFrame, List[pd.Series]]
  
      So the decorated `func` has to take a DataFrame as first argument.
  
      Notes
      -----
      Only when you want to perform row-based operations, such as `df.dropna(axis=0)`,
      this wrapper is needed.
      Hence, in most cases that `func` requires a `pd.DataFrame`, series arguments would
      be sufficient; as you can perform column-based operations on multiple `pd.Series`
      (e.g., subtract 2 series) and most dataframe operations are also available for a
      `pd.Series`.
  
      """
  
      def wrapper(*series: pd.Series, **kwargs):
          series_dict = {s.name: s for s in series}
          df = series_dict_to_df(series_dict)
          res = func(df, **kwargs)
          return res
  
      wrapper.__name__ = "dataframe_func: " + func.__name__
      return wrapper
  
file_path: tsflex/tsflex/processing/series_processor.py
imports: import time
  from typing import Callable, Dict, List, Tuple, Union
  import numpy
  import pandas
  from ..None import __pdoc__
  from ..utils.classes import FrozenClass
  from ..utils.data import flatten, series_dict_to_df, to_list, to_tuple
  from .logger import logger
label_desc: Use image node_id 1 for calling a global function with example usage: dataframe_func(func) and returns: wrapper, res