如何在Dask中进行sort_index,groupby并应用函数?

时间:2018-12-13 03:00:17

标签: python pandas apply dask

我有一个应用于熊猫数据框的函数,我正在考虑使用dask来提高性能

这是我现有的代码:

df.reset_index(
        level=0,
        inplace=True,
    )

df = df.sort_index().groupby(
            ['col1', 'col2', 'col3'],
            as_index=False).apply(
        myfunction
    )

我正在尝试将其转换为dask语法并设法达到:

from dask import dataframe as dd
from multiprocessing import cpu_count

nCores = cpu_count()

df = dd.from_pandas(
        df,
        npartitions=nCores
    ).reset_index().set_index().groupby(
        ['col1', 'col2', 'col3']
        ).apply(
            myfunction
        ).compute()

看来您只能将一列传递到set_index,并且没有sort_index()等效项。如何用dask语法编写此熊猫代码?

1 个答案:

答案 0 :(得分:0)

对于对类似解决方案感兴趣的任何人,这是dask语法中有效的代码版本,请注意,在将索引传递给dask之前,我对索引进行了排序。

from dask import dataframe as dd
from multiprocessing import cpu_count

nCores = cpu_count()

df.sort_index(inplace=True)

df = dd.from_pandas(
        df,
        npartitions=nCores
    ).map_partitions(
        lambda df : df.groupby(
            ['col1', 'col2', 'col3']
            ).apply(
                my_function
            )
        ).compute()

重要的是,较快的版本并不比熊猫的方法快。但非常接近my_function在这种情况下被矢量化,主要使用numpy数组应用于每个groupby对象。