def _combine_series_frame(self, other, func, fill_value=None, axis=None,<EOL>level=None):
if fill_value is not None:<EOL><INDENT>raise NotImplementedError("<STR_LIT>"<EOL>.format(fill=fill_value))<EOL><DEDENT>if axis is not None:<EOL><INDENT>axis = self._get_axis_number(axis)<EOL>if axis == <NUM_LIT:0>:<EOL><INDENT>return self._combine_match_index(other, func, level=level)<EOL><DEDENT>else:<EOL><INDENT>return self._combine_match_columns(other, func, level=level)<EOL><DEDENT><DEDENT>else:<EOL><INDENT>if not len(other):<EOL><INDENT>return self * np.nan<EOL><DEDENT>if not len(self):<EOL><INDENT>return self._constructor(data=self._series, index=self.index,<EOL>columns=self.columns)<EOL><DEDENT>return self._combine_match_columns(other, func, level=level)<EOL><DEDENT>
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