我有一个500,000行和3列的数据框。我想为数据帧中的每5,000行(即100块)计算三个函数的结果。定义了三个函数中的两个,而第三个是第3列中值的平均值。
目前,我首先提取一个块,然后计算该块的函数结果。对于第3列的平均值,我正在使用df.iloc[:,2].compute().mean()
,但是其他功能是在dask之外执行的。
是否有一种方法可以利用dask的多线程功能,将整个数据帧和块大小作为输入,并使其自动执行相同的功能?这感觉像是使用Dask的更合适的方法。
另外,这对我来说就像是一个基本的问题,因此,如果这是重复的问题,请指出我正确的位置(我是新来的,到目前为止,我可能没有寻找正确的东西) 。
答案 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)