在dask中迭代GroupBy对象

时间:2016-09-27 17:40:49

标签: python pandas dask

是否有可能迭代一个dask GroupBy对象来访问底层数据帧?我试过了:

import dask.dataframe as dd
import pandas as pd
pdf = pd.DataFrame({'A':[1,2,3,4,5], 'B':['1','1','a','a','a']})
ddf = dd.from_pandas(pdf, npartitions = 3)
groups = ddf.groupby('B')
for name, df in groups:
    print(name)

但是,这会导致错误:KeyError: 'Column not found: 0'

更一般地说,除了apply方法之外,dask GroupBy对象允许哪种交互?

2 个答案:

答案 0 :(得分:2)

你可以通过dask迭代完成这一步的小组,也许有更好的方法,但这对我有用。

import dask.dataframe as dd
import pandas as pd
pdf = pd.DataFrame({'A':[1, 2, 3, 4, 5], 'B':['1','1','a','a','a']})
ddf = dd.from_pandas(pdf, npartitions = 3)
groups = ddf.groupby('B')

for group in pdf['B'].unique():
    print groups.get_group(group)

这将返回

dd.DataFrame<dataframe-groupby-get_group-e3ebb5d5a6a8001da9bb7653fface4c1, divisions=(0, 2, 4, 4)>
dd.DataFrame<dataframe-groupby-get_group-022502413b236592cf7d54b2dccf10a9, divisions=(0, 2, 4, 4)>

答案 1 :(得分:2)

通常不建议迭代Dask.dataframe对象。效率低下。相反,您可能希望尝试使用groupby.apply

构建函数并将该函数映射到结果组