To make `aggregate`'s behaviour more similar to numpy's `reduceat`, one could replace this by
```
i0s = self.indices[:-1]
i1s = np.maximum(self.indices[1:], i0s+1)
```
Alternatively, below, it could be
```
vals = np.array([func(par_col[i0:max( i1,i0+1)]) for i0, i1 in izip(i0s, i1s)])
```
Perhaps a bit less clean but the advantage is that one doesn't have to allocate another index array (which may be big).