def recategorise(_df, _cat_type, _cols, _map=None):
    """
    A Convenience function to re-categorise the columns in the dataframe: the operation is performed in place. Note that
    the function allows mapping of categorical type with no overlaps through the _map construct.

    :param _df:         Data-Frame to recategorise
    :param _cat_type:   Categorical DType to set
    :param _cols:       The columns to change
    :param _map:        If need be, map certain values to others before recategorising: values which are not mapped
                        and which appear in the data but not in the new label-set (CDType) will be turned into NaN
    :return:            None (operation done in place)
    """
    if _map is not None:
        for col in _cols:
            _df.loc[:, (col)] = _df[col].map(_map)
            _df.loc[:, (col)] = _df[col].astype(float, copy=False).astype(
                _cat_type)
    else:
        for col in _cols:
            _df.loc[:, (col)] = _df[col].astype(float, copy=False).astype(
                _cat_type)
