def OneHotEncoding(dataset, column, drop=True, verbose=False):
    """Performs One Hot Encoding (OHE) usally used in Machine Learning.

    .. code-block:: python

        pycof.OneHotEncoding(dataset, column, drop=True, verbose=False)

    :Parameters:
        * **dataset** (:obj:`pandas.DataFrame`): Data Frame on which we apply One Hot Encoding.
        * **column** (:obj:`list`): Column to be converted to dummy variables.
        * **drop** (:obj:`bool`): Drop the column that needs to be converted to dummies (defaults True).
        * **verbose** (:obj:`bool`): Display progression (defaults False).
    
    :Example:
        >>> print(df)
        ... +----+--------+----------+-----+
        ... | Id | Gender | Category | Age |
        ... +----+--------+----------+-----+
        ... |  1 | Male   |        A |  23 |
        ... |  2 | Female |        B |  21 |
        ... |  3 | Female |        A |  31 |
        ... |  4 | Male   |        C |  22 |
        ... |  5 | Female |        A |  26 |
        ... +----+--------+----------+-----+
        >>> # Encoding columns "Gender" and "Category"
        >>> new_df = pycof.OneHotEncoding(df, column="Gender")
        >>> new_df = pycof.OneHotEncoding(new_df, column="Category")
        >>> print(new_df)
        ... +----+---------------+------------+------------+-----+
        ... | Id | Gender_Female | Category_A | Category_B | Age |
        ... +----+---------------+------------+------------+-----+
        ... |  1 |             0 |          1 |          0 |  23 |
        ... |  2 |             1 |          0 |          1 |  21 |
        ... |  3 |             1 |          1 |          0 |  31 |
        ... |  4 |             0 |          0 |          0 |  22 |
        ... |  5 |             1 |          1 |          0 |  26 |
        ... +----+---------------+------------+------------+-----+

    :Returns:
        :obj:`pandas.DataFrame`: Transformed dataset with One Hot Encoding.
    """
    all_values = dataset[column].unique()
    for val in all_values:
        if verbose:
            print('Encoding for value: ' + str(val))
        dataset[column + '_' + str(val)] = 0
        dataset[column + '_' + str(val)][dataset[column] == val] = 1
    if drop:
        dataset = dataset.drop(columns=[column])
    return dataset
