<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _full_reduce(self, axis, map_func, reduce_func=None):
 """Apply function that will reduce the data to a Pandas Series. Args: axis: 0 for columns and 1 for rows. Default is 0. map_func: Callable function to map the dataframe. reduce_func: Callable function to reduce the dataframe. If none, then apply map_func twice. Return: A new QueryCompiler object containing the results from map_func and reduce_func. """

        if reduce_func is None:
            reduce_func = map_func

        mapped_parts = self.data.map_across_blocks(map_func)
        full_frame = mapped_parts.map_across_full_axis(axis, reduce_func)
        if axis == 0:
            columns = self.columns
            return self.__constructor__(
                full_frame, index=["__reduced__"], columns=columns
            )
        else:
            index = self.index
            return self.__constructor__(
                full_frame, index=index, columns=["__reduced__"]
            )