def interact_features(feature_df, interact_list, drop_original_columns=True):
    """
    This function create interactions between pairs of features
    :param feature_df: a pandas dataframe
    :param interact_list: list of lists or tuples with two strings each, representing columns to be interacted.
    :param drop_original_columns: (bool) if set to True, columns to be interacted will be droped from the dataframe. note-
    if set to true a column cannot appear in more then one interaction pair.
    :return: DataFrame with the interactions columns, without the original columns.
    """

    for features_pair in interact_list:
        feature_0 = features_pair[0]
        feature_1 = features_pair[1]

        if (feature_0 not in feature_df.columns) or (feature_1 not in feature_df.columns):
            print('Warning: one the features: ' + feature_0 + ',' + feature_1 + 'do not exists in the Data.')
        else:
            new_feature = feature_df[feature_0] * feature_df[feature_1]
            if drop_original_columns:
                feature_df = feature_df.drop(feature_0, axis=1)
                feature_df = feature_df.drop(feature_1, axis=1)
            feature_df[feature_0 + '_X_' + feature_1] = new_feature

    return feature_df