code: def impute_with_lags_multi(
      df, orders, agg_func=np.mean, iter_num=1, cols=None
  ):
      """Imputes every column of ``df`` using
      `~greykite.common.features.timeseries_impute.impute_with_lags`.
  
      Parameters
      ----------
      df : `pandas.DataFrame`
          Input dataframe which must include `value_col` as a column.
      orders : list of `int`
          The lag orders to be used for aggregation.
      agg_func : callable, default `np.mean`
          `pandas.Series` -> `float`
          An aggregation function to aggregate the chosen lags.
      iter_num : `int`, default `1`
          Maximum number of iterations to impute the series.
          Each iteration represent an imputation of the series using the provided
          lag orders (``orders``) and return an imputed dataframe.
          It might be the case that with one iterations some values
          are not imputed but with more iterations one can achieve more
          imputed values.
      cols : `list` [`str`] or None, default None
          Which columns to impute. If None, imputes all columns.
  
      Returns
      -------
      impute_info : `dict`
          A dictionary with following items:
  
          "df" : `pandas.DataFrame`
              A dataframe with the imputed values.
          "missing_info" : `dict`
              Dictionary with information about the missing info.
  
              Key = name of a column in ``df``
              Value = dictionary containing:
  
                  "initial_missing_num" : `int`
                      Initial number of missing values.
                  "final_missing_num" : `int`
                      Final number of missing values after imputation.
      """
      if cols is None:
          cols = df.columns
      impute_info = {"df": df.copy(), "missing_info": {}}
      for col in cols:
          # updates each column with the imputed values
          col_impute_info = impute_with_lags(
              df=df,
              value_col=col,
              orders=orders,
              agg_func=agg_func,
              iter_num=iter_num,
          )
          impute_info["df"][col] = col_impute_info["df"][col]
          impute_info["missing_info"][col] = {
              "initial_missing_num": col_impute_info[
                  "initial_missing_num"
              ],
              "final_missing_num": col_impute_info["final_missing_num"],
          }
      return impute_info
  
label_desc: Use image node_id 2 for calling a global function with example usage: impute_with_lags_multi(df, orders, agg_func, iter_num, cols) and returns: impute_info