code: def updateExogenousVariableInfo(self):
      # print(self.mExogenousDataFrame.info());
      self.mExogenousVariableCategories = {}
      self.mContExogenousStats = {}
      # Compute these stats only on the estimation part.
      (lTimeMin, lTimeMax) = (
          self.mTimeInfo.mTimeMin,
          self.mTimeInfo.mTimeMax,
      )
      if self.mTimeInfo.isPhysicalTime():
          (lTimeMin, lTimeMax) = (
              pd.Timestamp(self.mTimeInfo.mTimeMin),
              pd.Timestamp(self.mTimeInfo.mTimeMax),
          )
  
      lEstimFrame = self.mExogenousDataFrame[
          self.mExogenousDataFrame[self.mDateVariable] >= lTimeMin
      ]
      lEstimFrame = lEstimFrame[
          lEstimFrame[self.mDateVariable] <= lTimeMax
      ]
      for exog in self.mExogenousVariables:
          lType = self.mExogenousDataFrame[exog].dtype
          # print("EXOG_DTYPE" , exog, lType)
          if (lType == np.object) or (lType.name == "category"):
              # use nan as a category
              lVC = lEstimFrame[exog].value_counts(
                  dropna=False, sort=False
              )
              lVC = lVC.reset_index().sort_values(
                  by=[exog, "index"], ascending=[False, True]
              )
              NCat = self.mOptions.mMaxExogenousCategories
              NCat = min(NCat, lVC.shape[0])
              # print("EXOGENOUS_DATA", lVC.head(NCat));
              lList = []
              # print(lVC.head())
              for row in lVC.itertuples():
                  # print(row)
                  lCount = row[2]
                  if lCount > 5 and (len(lList) < NCat):
                      lList.append(row[1])
              lList = sorted(lList)
              # lListlVC.index[0:NCat].tolist();
              # print("most_frequent_categories_for" , exog, lList);
              if len(lList) == 0:
                  self.mExcluded.append(exog)
              else:
                  self.mExogenousVariableCategories[exog] = lList
          else:
              self.mExogenousVariableCategories[exog] = None
              stat_exog = (
                  lEstimFrame[exog].mean(),
                  lEstimFrame[exog].std(),
              )
              if stat_exog[1] > 1e-5:
                  self.mContExogenousStats[exog] = stat_exog
              else:
                  self.mExcluded.append(exog)
  
file_path: atspy/atspy/TS/Exogenous.py
imports: import pandas
  import numpy
  from .None import Utils
label_desc: Use image node_id 8 for calling the cExogenousInfo obj's underlying member method code with example usage: obj.updateExogenousVariableInfo() without return types