'Group this table by the specified ``keys``
This effectively splits the table into groups which correspond to
unique values of the ``keys`` grouping object.  The output is a new
`TableGroups` which contains a copy of this table but sorted by row
according to ``keys``.
The ``keys`` input to `group_by` can be specified in different ways:
- String or list of strings corresponding to table column name(s)
- Numpy array (homogeneous or structured) with same length as this table
- `Table` with same length as this table
Parameters
keys : str, list of str, numpy array, or `Table`
Key grouping object
Returns
out : `Table`
New table with groups set'

def group_by(self, keys):

    if self.has_mixin_columns:
        raise NotImplementedError(u'group_by    not    available    for    tables    with    mixin    columns')
    return groups.table_group_by(self, keys)
