我有一个很大的数据框架(几百万行)。
我希望能够对它执行 groupby 操作,但只是按任意连续(最好是大小相等)的行子集进行分组,而不是使用单个行的任何特定属性来决定它们到哪个组。
用例: 我想通过 IPython 中的并行映射对每一行应用一个函数。不管哪些行到哪个后端引擎,因为该函数一次只计算一行结果。(至少在概念上是这样; 实际上是向量化的。)
我想到了这样的东西:
# 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)
但这似乎非常冗长,并不能保证大小相同的块。特别是当索引是稀疏的或者非整数的或者其他什么的时候。
有什么更好的建议吗?
谢谢!