def generate_pokemon_stats_col(input_df):
    """
    In this func, we add 4 new columns to indicates the strength of a pokemon

    :param input_df: the input pokemon data source
    :return: the transformed data frame with newly added column
    """
    mod_attack = input_df['attack'] * 1.5
    mod_sp_attack = input_df['special_attack'] * 1.5
    mod_speed = input_df['speed'] * 2

    # add a new column into df called base_stats, which is the sum of attack, defense, hp, etc. It indicates the
    # overall strength of a pokemon
    input_df['base_stats'] = input_df['attack'] + input_df['defense'] + input_df['hp'] + input_df['special_attack'] + \
                             input_df[
                                 'special_defense'] + input_df['speed']
    # add a new column into df called off_stats, It indicates the attack strength
    input_df['off_stats'] = input_df['attack'] + input_df['special_attack'] + input_df[
        'speed']
    # add a new column into df called def_stats. It indicates the def strength
    input_df['def_stats'] = input_df['defense'] + input_df['hp'] + input_df[
        'special_defense']
    # add a new column into df called mod_stats. It indicates the overall strength more accurately. Because after EDA,
    # we found speed has more impact.
    input_df['overall_score'] = (mod_attack + input_df['defense'] + input_df['hp'] + mod_sp_attack + input_df[
        'special_defense'] + mod_speed)
    return input_df