def aggregateColumns(df, columns, aggregateFunc, sep="--"):
  """
  Creates a new column that that is an aggregation of existing columns.
  The old column is deleted. The new column is named
  as the concatenation of old columns separated by the separator.
  :param pd.DataFrame df:
  :param list-str columns:
  :param Function aggregateFunc: arg is dataframe; returns Series
  :return str: name of the new column
  """
  df_sub = df[list(columns)]
  merged = aggregateFunc(df_sub)
  for col in columns:
    del df[col]
  str_columns = [str(c) for c in columns]
  new_column = sep.join(str_columns)
  df[new_column] = merged
  return new_column