docs: def _station_load(network, station, crit_stations):
      """
      Checks for over-loading of stations.
  
      Parameters
      ----------
      network : :class:`~.grid.network.Network`
      station : :class:`~.grid.components.LVStation` or :class:`~.grid.components.MVStation`
      crit_stations : :pandas:`pandas.DataFrame<dataframe>`
          Dataframe containing over-loaded stations, their apparent power at
          maximal over-loading and the corresponding time step.
          Index of the dataframe are the over-loaded stations either of type
          :class:`~.grid.components.LVStation` or
          :class:`~.grid.components.MVStation`. Columns are 's_pfa'
          containing the apparent power at maximal over-loading as float and
          'time_index' containing the corresponding time step the over-loading
          occured in as :pandas:`pandas.Timestamp<timestamp>`.
  
      Returns
      -------
      :pandas:`pandas.DataFrame<dataframe>`
          Dataframe containing over-loaded stations, their apparent power at
          maximal over-loading and the corresponding time step.
          Index of the dataframe are the over-loaded stations either of type
          :class:`~.grid.components.LVStation` or
          :class:`~.grid.components.MVStation`. Columns are 's_pfa'
          containing the apparent power at maximal over-loading as float and
          'time_index' containing the corresponding time step the over-loading
          occured in as :pandas:`pandas.Timestamp<timestamp>`.
  
      """
      if isinstance(station, LVStation):
          grid_level = 'lv'
      else:
          grid_level = 'mv'
  
      # maximum allowed apparent power of station for feed-in and load case
      s_station = sum([_.type.S_nom for _ in station.transformers])
      s_station_allowed_per_case = {}
      s_station_allowed_per_case['feedin_case'] = s_station * network.config[
          'grid_expansion_load_factors']['{}_feedin_case_transformer'.format(
          grid_level)]
      s_station_allowed_per_case['load_case'] = s_station * network.config[
          'grid_expansion_load_factors']['{}_load_case_transformer'.format(
          grid_level)]
      # maximum allowed apparent power of station in each time step
      s_station_allowed = \
          network.timeseries.timesteps_load_feedin_case.case.apply(
              lambda _: s_station_allowed_per_case[_])
  
      try:
          if isinstance(station, LVStation):
              s_station_pfa = network.results.s_res(
                  station.transformers).sum(axis=1)
          else:
              s_station_pfa = network.results.s_res([station]).iloc[:, 0]
          s_res = s_station_allowed - s_station_pfa
          s_res = s_res[s_res < 0]
          # check if maximum allowed apparent power of station exceeds
          # apparent power from power flow analysis at any time step
          if not s_res.empty:
              # find out largest relative deviation
              load_factor = \
                  network.timeseries.timesteps_load_feedin_case.case.apply(
                      lambda _: network.config[
                          'grid_expansion_load_factors'][
                          '{}_{}_transformer'.format(grid_level, _)])
              relative_s_res = load_factor * s_res
              crit_stations = crit_stations.append(pd.DataFrame(
                  {'s_pfa': s_station_pfa.loc[relative_s_res.idxmin()],
                   'time_index': relative_s_res.idxmin()},
                  index=[station]))
  
      except KeyError:
          logger.debug('No results for {} station to check overloading.'.format(
              grid_level.upper()))
  
      return crit_stations