如何将多个功能应用于dask数据帧的多个块?

时间:2020-03-13 09:16:36

标签: python pandas function dataframe dask

我有一个500,000行和3列的数据框。我想为数据帧中的每5,000行(即100块)计算三个函数的结果。定义了三个函数中的两个,而第三个是第3列中值的平均值。

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

是否有一种方法可以利用dask的多线程功能,将整个数据帧和块大小作为输入,并使其自动执行相同的功能?这感觉像是使用Dask的更合适的方法。

另外,这对我来说就像是一个基本的问题,因此,如果这是重复的问题,请指出我正确的位置(我是新来的,到目前为止,我可能没有寻找正确的东西) 。

2 个答案:

答案 0 :(得分:0)

您可以创建一个人工列,将索引分为这100个块。

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

然后使用此idx_group通过pandas groupby执行操作。

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

答案 1 :(得分:0)

我会重新分区您的数据框,然后使用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)