Python 将数据帧行分配给Dask数据帧分区

Python 将数据帧行分配给Dask数据帧分区,python,pandas,dataframe,dask,Python,Pandas,Dataframe,Dask,假设一个具有X个分区的dask数据帧。假设数据帧具有相同的X行数。熊猫数据帧的每一行包含与dask数据帧的每个分区相关的数据 我想将每一行分配给一个新的dask数据帧分区列 import pandas as pd import dask imoprt numpy as np # default dask dataframe with 30 partitions ddf = dask.datasets.timeseries() df0 = pd.DataFrame({'A': np.rando

假设一个具有X个分区的dask数据帧。假设数据帧具有相同的X行数。熊猫数据帧的每一行包含与dask数据帧的每个分区相关的数据

我想将每一行分配给一个新的dask数据帧分区列

import pandas as pd
import dask
imoprt numpy as np

# default dask dataframe with 30 partitions
ddf = dask.datasets.timeseries()

df0 = pd.DataFrame({'A': np.random.randint(0,100, size=30),
                   'B': np.random.randint(0,100, size=30)})
这样做效率很低的方法是:

df_list = []
for n in range(ddf.npartitions):
    df_list.append(ddf.partitions[n])

for i,df in enumerate(df_list):
    df['A'] = df0['A'].iloc[i]
我如何才能达到同样的结果,但仍然留在达斯克?也许是地图分区


如果在dask中不可能,那么如何才能更有效地避免循环?

您的for循环仅超过了分区的数量,而分区的数量通常很小(小于10000),因此效率在这里不太可能成为问题

事实上,它最终并没有像这样慢。但问题是,我最终得到的是一个数据帧列表,而不是I-dask-dataframe。在dask中没有一种方法可以做到这一点吗?没有dask.dataframe操作来做你想做的事情,但是在你有了小的dask数据帧列表之后,你可以调用
dd.concat(df_list,axis=0)
再次获得一个dask数据帧。好吧,至少现在似乎没有更好的方法了。谢谢更新的SO答案中提供了一种实现这一点的方法(使用
映射分区
)。它使用
ddf.get\u partition(…)
然后用
map\u partition
附加额外的行。查看该答案,了解有关实现的详细信息。