Fetches the row-aggregated input columns for this ColumnFunction.

        Args:
            aggregator (Aggregator)

        Returns:
            pd.DataFrame: The dataframe has columns with names self.names
                that were created by this ColumnFunction,
                and is indexed by the index that was passed to
                aggregator.aggregate(index).

def apply_and_name(self, aggregator):
        """Fetches the row-aggregated input columns for this ColumnFunction.

        Args:
            aggregator (Aggregator)

        Returns:
            pd.DataFrame: The dataframe has columns with names self.names
                that were created by this ColumnFunction,
                and is indexed by the index that was passed to
                aggregator.aggregate(index).
        """
        reduced_df = self._apply(aggregator)
        if len(self.names) != len(reduced_df.columns):
            raise IndexError("ColumnFunction creates more columns than it has names for.")
        reduced_df.columns = self.names
        return reduced_df