Python dask映射分区(pd.cut、bins)是否会在整个数据帧上实际运行?

Python dask映射分区(pd.cut、bins)是否会在整个数据帧上实际运行?,python,dask,Python,Dask,我需要在dask数据帧上使用pd.cut 指示map_分区将通过将pd.cut作为函数传递来工作 似乎map_分区一次只向函数传递一个分区。但是,pd.cut需要访问my df的整个列才能创建箱子。因此,我的问题是:在这种情况下,map_分区是否会在整个数据帧上实际运行,或者使用这种方法是否会得到错误的结果?在您的问题中,您正确地确定了为什么应该显式提供BIN 通过指定确切的bin cuts(基于某些计算或外部推理),可以确保dask所做的工作在分区之间具有可比性 #这并不保证可比较的切割 dd

我需要在dask数据帧上使用pd.cut

指示map_分区将通过将pd.cut作为函数传递来工作


似乎map_分区一次只向函数传递一个分区。但是,pd.cut需要访问my df的整个列才能创建箱子。因此,我的问题是:在这种情况下,map_分区是否会在整个数据帧上实际运行,或者使用这种方法是否会得到错误的结果?

在您的问题中,您正确地确定了为什么应该显式提供BIN

通过指定确切的bin cuts(基于某些计算或外部推理),可以确保dask所做的工作在分区之间具有可比性

#这并不保证可比较的切割
ddf['a'].map_分区(pd.cut)
#这确保切割符合指定的料仓
ddf['a'].映射分区(pd.cut,bins)
如果要以自动方式生成箱子,一种方法是获取感兴趣列的最小/最大值,并使用
np.linspace
生成箱子:

#请注意,需要计算才能给出
#np.linspace的实际(未延迟)值
bmin,bmax=dask.compute(ddf['a'].min(),ddf['a'].max)
#在此处指定所需的切割数
bin=np.linspace(bmin,bmax,num=123)

谢谢!如果我只为箱子指定一个整数,那么也不能保证可比较的切割,这是否正确?dask有没有办法让它在整个列上运行一些函数(pd.cut或其他)?由于.apply仅允许轴为1,因此,.apply不是一个选项。理想情况下,我会为箱子传递一个整数,让pd.cut先确定箱子,而不是单独确定箱子。请参阅更新的答案,尽管由于中间计算的原因,这并不理想。非常感谢。这完成了我想要做的事情。