def split_iterable_as_unordered_iterable(self, values):
    'Group iterable into iterables, without regard for the ordering of self.index.unique\n        key-group tuples are yielded as soon as they are complete\n\n        Parameters\n        ----------\n        values : iterable of length equal to keys\n            iterable of values to be grouped\n\n        Yields\n        ------\n        tuple of key, and a list of corresponding items in values\n\n        Notes\n        -----\n        This approach is lazy, insofar as grouped values are close in their iterable\n        '
    from collections import defaultdict
    cache = defaultdict(list)
    count = self.count
    unique = self.unique
    key = ((lambda i: unique[i]) if isinstance(unique, np.ndarray) else (lambda i: tuple((c[i] for c in unique))))
    for (i, v) in zip(self.inverse, values):
        cache[i].append(v)
        if (len(cache[i]) == count[i]):
            (yield (key(i), cache.pop(i)))
Group iterable into iterables, without regard for the ordering of self.index.unique
key-group tuples are yielded as soon as they are complete

Parameters
----------
values : iterable of length equal to keys
    iterable of values to be grouped

Yields
------
tuple of key, and a list of corresponding items in values

Notes
-----
This approach is lazy, insofar as grouped values are close in their iterable
def split_iterable_as_unordered_iterable(self, values):
    'Group iterable into iterables, without regard for the ordering of self.index.unique\n        key-group tuples are yielded as soon as they are complete\n\n        Parameters\n        ----------\n        values : iterable of length equal to keys\n            iterable of values to be grouped\n\n        Yields\n        ------\n        tuple of key, and a list of corresponding items in values\n\n        Notes\n        -----\n        This approach is lazy, insofar as grouped values are close in their iterable\n        '
    from collections import defaultdict
    cache = defaultdict(list)
    count = self.count
    unique = self.unique
    key = ((lambda i: unique[i]) if isinstance(unique, np.ndarray) else (lambda i: tuple((c[i] for c in unique))))
    for (i, v) in zip(self.inverse, values):
        cache[i].append(v)
        if (len(cache[i]) == count[i]):
            (yield (key(i), cache.pop(i)))