如何在Dask中进行行处理和项目分配

she*_*ero 2 python dataframe pandas dask

类似的未回答问题:逐行处理 Dask 数据帧

我正在处理数百万行长的数据帧,所以现在我试图并行执行所有数据帧操作。我需要转换为 Dask 的一个这样的操作是:

 for row in df.itertuples():                                                                                                                                                                                                         
     ratio = row.ratio                                                                                                                                                                                                                     
     tmpratio = row.tmpratio                                                                                                                                                                                                                                                                                                                                                                                                 
     tmplabel = row.tmplabel                                                                                                                                                                                                               
     if tmpratio > ratio:                                                                                                                                                                                                                  
         df.loc[row.Index,'ratio'] = tmpratio                                                                                                                                                                                        
         df.loc[row.Index,'label'] = tmplabel
Run Code Online (Sandbox Code Playgroud)

在 Dask 中按索引设置值或有条件地在行中设置值的合适方法是什么?由于.loc不支持DASK项任务,似乎没有成为set_valueat[]或者iat[]在DASK无论是。

我尝试将map_partitionsassign一起使用,但我没有看到在行级别执行条件分配的任何能力。

MRo*_*lin 5

Dask 数据框不支持高效迭代或行分配。一般来说,这些工作流程很少能很好地扩展。它们在 Pandas 本身中也很慢。

相反,您可以考虑使用Series.where方法。这是一个最小的例子:

In [1]: import pandas as pd

In [2]: df = pd.DataFrame({'x': [1, 2, 3], 'y': [3, 2, 1]})

In [3]: import dask.dataframe as dd

In [4]: ddf = dd.from_pandas(df, npartitions=2)

In [5]: ddf['z'] = ddf.x.where(ddf.x > ddf.y, ddf.y)

In [6]: ddf.compute()
Out[6]:
   x  y  z
0  1  3  3
1  2  2  2
2  3  1  3
Run Code Online (Sandbox Code Playgroud)