如何有效地在dask中使用pandas.cut()(或等效的)?

时间:2017-02-24 15:12:21

标签: python pandas dask

在Dask中是否有等效的pandas.cut()?

我尝试在Python中对大型数据集进行bin和分组。它是具有特性(位置X,位置Y,能量,时间)的测量电子列表。我需要将它分配到positionX,positionY并在能量类中进行分箱。

到目前为止,我可以用熊猫来做,但我想并行运行它。所以,我尝试使用dask。

groupby方法非常有效,但遗憾的是,在尝试 bin 能量数据时遇到了困难。我找到了一个使用pandas.cut()的解决方案,但它需要在原始数据集上调用compute()(将其转换为非并行代码)。是否有与dask中的pandas.cut()等效,还是有另一种(优雅)方式来实现相同的功能?

import dask 
# create dask dataframe from the array
dd = dask.dataframe.from_array(mainArray, chunksize=100000, columns=('posX','posY', 'time', 'energy'))

# Set the bins to bin along energy
bins = range(0, 10000, 500)

# Create the cut in energy (using non-parallel pandas code...)
energyBinner=pandas.cut(dd['energy'],bins)

# Group the data according to posX, posY and energy
grouped = dd.compute().groupby([energyBinner, 'posX', 'posY'])

# Apply the count() method to the data:
numberOfEvents = grouped['time'].count()

非常感谢!

1 个答案:

答案 0 :(得分:5)

您应该能够dd['energy'].map_partitions(pd.cut, bins)