如何将多个函数应用于一个dask数据帧的几个块



我有一个500000行3列的数据帧。我想为数据帧中5000行的每一个块(即100个块(计算三个函数的结果。三个函数中的两个是使用定义的,而第三个是第3列中值的平均值。

目前,我首先提取一个块,然后计算该块的函数结果。对于第3列的平均值,我使用df.iloc[:,2].compute().mean(),但其他函数在dask之外执行。

有没有一种方法可以利用dask的多线程能力,将整个数据帧和块大小作为输入,并让它自动计算相同的函数?这感觉更适合使用Dask。

此外,这对我来说是一个基本的dask问题,所以如果这是一个重复的问题,请把我指向正确的地方(我是dask的新手,到目前为止我可能还没有找到正确的东西(。

我会重新划分数据帧,然后使用map_partitions函数在并行中应用每个函数

df = df.repartition(npartitions=100)
a = df.map_partitions(func1)
b = df.map_partitions(func2)
c = df.map_partitions(func3)
a, b, c = dask.compute(a, b, c)

您可以创建一个人工列,用于将索引分组到这100个块中。

ranges = np.arange(0, df.shape[0], 5000)
df['idx_group'] = ranges.searchsorted(df.index, side='right')

然后使用这个idx_group使用pandas groupby执行操作。

注意:您可以使用searchsorted来完全满足您的区块需求。

最新更新