У меня есть большой фрейм данных (несколько миллионов строк).
Я хочу иметь возможность выполнять операцию groupby на нем, а просто группировать произвольные последовательные (предпочтительно равные) подмножества строк, а не использовать какое-либо конкретное свойство отдельных строк, чтобы решить, к какой группе они идут.
Вариант использования: я хочу применить функцию к каждой строке через параллельную карту в IPython. Не имеет значения, какие строки попадают в какой-то back-end движок, поскольку функция вычисляет результат на основе одной строки за раз. (Концептуально, по крайней мере, в действительности он векторизован.)
Я придумал что-то вроде этого:
# Generate a number from 0-9 for each row, indicating which tenth of the DF it belongs to
max_idx = dataframe.index.max()
tenths = ((10 * dataframe.index) / (1 + max_idx)).astype(np.uint32)
# Use this value to perform a groupby, yielding 10 consecutive chunks
groups = [g[1] for g in dataframe.groupby(tenths)]
# Process chunks in parallel
results = dview.map_sync(my_function, groups)
Но это кажется очень длинным, и не гарантирует равных размеров кусков. Особенно, если индекс разрежен или нецелый или что-то еще.
Любые предложения для лучшего способа?
Спасибо!