code: def _combine_series_frame(self, other, func, fill_value=None, axis=None,
                            level=None):
      
      if fill_value is not None:
          raise NotImplementedError("fill_value {fill} not supported."
                                    .format(fill=fill_value))
  
      if axis is not None:
          axis = self._get_axis_number(axis)
          if axis == 0:
              return self._combine_match_index(other, func, level=level)
          else:
              return self._combine_match_columns(other, func, level=level)
      else:
          if not len(other):
              return self * np.nan
  
          if not len(self):
              # Ambiguous case, use _series so works with DataFrame
              return self._constructor(data=self._series, index=self.index,
                                       columns=self.columns)
  
          # default axis is columns
          return self._combine_match_columns(other, func, level=level)
docs: Apply binary operator `func` to self, other using alignment and fill
      conventions determined by the fill_value, axis, and level kwargs.
  
      Parameters
      ----------
      self : DataFrame
      other : Series
      func : binary operator
      fill_value : object, default None
      axis : {0, 1, 'columns', 'index', None}, default None
      level : int or None, default None
  
      Returns
      -------
      result : DataFrame