@staticmethod
def aggregate_by_functions(df, column_name, group_by, functions=['sum',
    'count']):
    """Aggregate by multiple functions

        Parameters
        ----------
        df : pandas.core.frame.DataFrame
            Two-dimensional size-mutable,
            potentially heterogeneous tabular data
        column_name : TYPE
        group_by : TYPE
            Description
        functions : list, optional
            Description

        Returns
        -------
        `pandas.core.frame.DataFrame`
            DataFrame

        Example
        -------
        # Lets say, you want the total price of each order as well as the
        # number of items in each order.
        >> Orders.head(5)
            order_id | quantity | item_name | choice_description | item_price
            1 | 1 | Chips and Fresh Tomato Salsa          | NaN          | 2.39
            1 | 1 | Izze                                  | [Clementine] | 3.39
            1 | 1 | Nantucket Nectar                      | [Apple]      | 3.39
            1 | 1 | Chips and Tomatillo-Green Chili Salsa | NaN          | 2.39
            2 | 2 | Chicken Bowl                          | NaN          | 16.98
        >> aggregate_by_functions(orders, 'item_price', 'order_id').head()
            order_id  | sum   | count
                    1 | 11.56 | 4
                    2 | 16.98 | 1
                    3 | 12.67 | 2
                    4 | 21.00 | 2
                    5 | 13.70 | 2
        """
    return df.groupby(group_by)[column_name].agg(functions)
