docs: def factorize_groupby_cols(self, groupby_cols):
          """
          factorizes all columns that are used in the groupby
          it will use cache carrays if available
          if not yet auto_cache is valid, it will create cache carrays
  
          """
          # first check if the factorized arrays already exist
          # unless we need to refresh the cache
          factor_list = []
          values_list = []
  
          # factorize the groupby columns
          for col in groupby_cols:
  
              if self.auto_cache or self.cache_valid(col):
                  # create factorization cache if needed
                  if not self.cache_valid(col):
                      self.cache_factor([col])
  
                  col_rootdir = self[col].rootdir
                  col_factor_rootdir = col_rootdir + '.factor'
                  col_values_rootdir = col_rootdir + '.values'
                  col_carray_factor = \
                      bcolz.carray(rootdir=col_factor_rootdir, mode='r')
                  col_carray_values = \
                      bcolz.carray(rootdir=col_values_rootdir, mode='r')
              else:
                  col_carray_factor, values = ctable_ext.factorize(self[col])
                  col_carray_values = \
                      bcolz.carray(np.fromiter(values.values(), dtype=self[col].dtype))
  
              factor_list.append(col_carray_factor)
              values_list.append(col_carray_values)
  
          return factor_list, values_list