def METHOD_NAME(self, groups, grouping_criterion):
    """ Returns a new ArrayTable object in which columns are
    merged according to a given criterion.
    'groups' argument must be a dictionary in which keys are the
    new column names, and each value is the list of current
    column names to be merged.
    'grouping_criterion' must be 'min', 'max' or 'mean', and
    defines how numeric values will be merged.
    Example:
       my_groups = {'NewColumn':['column5', 'column6']}
       new_Array = Array.merge_columns(my_groups, 'max')
    """
    if grouping_criterion == "max":
        grouping_f = get_max_vector
    elif grouping_criterion == "min":
        grouping_f = get_min_vector
    elif grouping_criterion == "mean":
        grouping_f = get_mean_vector
    else:
        raise ValueError("grouping_criterion not supported. Use max|min|mean ")
    grouped_array = self.__class__()
    grouped_matrix = []
    colNames = []
    alltnames = set([])
    for gname,tnames in groups.items():
        all_vectors=[]
        for tn in tnames:
            if tn not in self.colValues:
                raise ValueError(str(tn)+" column not found.")
            if tn in alltnames:
                raise ValueError(str(tn)+" duplicated column name for merging")
            alltnames.add(tn)
            vector = self.get_column_vector(tn).astype(float)
            all_vectors.append(vector)
        # Store the group vector = max expression of all items in group
        grouped_matrix.append(grouping_f(all_vectors))
        # store group name
        colNames.append(gname)
    for cname in self.colNames:
        if cname not in alltnames:
            grouped_matrix.append(self.get_column_vector(cname))
            colNames.append(cname)
    grouped_array.rowNames= self.rowNames
    grouped_array.colNames= colNames
    vmatrix = numpy.array(grouped_matrix).transpose()
    grouped_array._link_names2matrix(vmatrix)
    return grouped_array