【发布时间】:2018-05-14 06:42:34
【问题描述】:
正如有据可查的那样,当调用reset_index 时,Dask 会在每个分区的基础上创建一个严格递增的索引,从而导致整个集合中的索引重复。在整个集合中,在 Dask 中创建严格递增的索引(不必连续)的最佳方法是什么(例如计算速度最快)?我希望map_partitions 会传递分区号,但我认为不会。谢谢。
编辑
感谢@MRocklin,我已经做到了这一点,但我需要一些帮助来了解如何将我的系列与原始数据框重新组合。
def create_increasing_index(ddf:dd.DataFrame):
mps = int(len(ddf) / ddf.npartitions + 1000)
values = ddf.index.values
def do(x, max_partition_size, block_id=None):
length = len(x)
if length == 0:
raise ValueError("Does not work with empty partitions. Consider using dask.repartition.")
start = block_id[0] * max_partition_size
return da.arange(start, start+length, chunks=1)
series = values.map_blocks(do, max_partition_size=mps, dtype=np.int64)
ddf2 = dd.concat([ddf, dd.from_array(series)], axis=1)
return ddf2
我收到错误“ValueError: Unable to concatenate DataFrame with unknown Division specified axis=1”。有没有比使用 dd.concat 更好的方法?谢谢。
再次编辑
实际上,就我的目的(以及我正在测试的数据量 - 只有几 GB)而言,cumsum 已经足够快了。当这变得太慢时,我会重新访问!
【问题讨论】:
标签: python python-3.x dask