code: def _reorder_for_extension_array_stack(arr, n_rows, n_columns):
      
      # final take to get the order correct.
      # idx is an indexer like
      # [c0r0, c1r0, c2r0, ...,
      #  c0r1, c1r1, c2r1, ...]
      idx = np.arange(n_rows * n_columns).reshape(n_columns, n_rows).T.ravel()
      return arr.take(idx)
docs: Re-orders the values when stacking multiple extension-arrays.
  
      The indirect stacking method used for EAs requires a followup
      take to get the order correct.
  
      Parameters
      ----------
      arr : ExtensionArray
      n_rows, n_columns : int
          The number of rows and columns in the original DataFrame.
  
      Returns
      -------
      taken : ExtensionArray
          The original `arr` with elements re-ordered appropriately
  
      Examples
      --------
      >>> arr = np.array(['a', 'b', 'c', 'd', 'e', 'f'])
      >>> _reorder_for_extension_array_stack(arr, 2, 3)
      array(['a', 'c', 'e', 'b', 'd', 'f'], dtype='<U1')
  
      >>> _reorder_for_extension_array_stack(arr, 3, 2)
      array(['a', 'd', 'b', 'e', 'c', 'f'], dtype='<U1')