2016-08-11 212 views
1

我正在尝试使用Dask来处理大文件(50 GB)。通常,我会将它加载到内存中并使用Pandas。我想分两列“A”和“B”,每当列“C”以一个值开始时,我想在该列中为该特定组重复该值。Dask中的基本groupby操作

在熊猫,我会做到以下几点:

df['C'] = df.groupby(['A','B'])['C'].fillna(method = 'ffill') 

什么将是DASK等价? 另外,我有点失去了作为为大熊猫而不是如何构建在DASK问题,

谢谢你,

我迄今取得的进展:

第一组指标:

df1 = df.set_index(['A','B']) 

然后GROUPBY:

df1.groupby(['A','B']).apply(lambda x: x.fillna(method='ffill').compute() 

回答

1

看来DASK目前不执行方法的GroupBy对象。我前段时间尝试过PR,很快就放弃了。

此外,dask不支持method参数(因为使用延迟算法实现并不总是微不足道的)。

的规避这可能是使用fillna分组,像这样前:

df['C'] = df.fillna(0).groupby(['A','B'])['C']

虽然这并没有进行测试。

你可以找到我的(失败)的尝试在这里:https://github.com/nirizr/dask/tree/groupy_fillna

+0

谢谢Nirlzr。我想填充NAN主题的每个组中的值,这通常在组之间有所不同。尽管他们处于不同的群体中,您的解决方案是否为所有的NAN提供了相同的价值? – dleal

+0

是的,不幸的是你是正确的。如果这是你的目标 - 将会类似于'df ['C'] = df ['C']。fillna(c_fill)'工作吗? – NirIzr

+0

请注意,在我的小例子中:http://stackoverflow.com/questions/39048181/groupby-of-splitted-data-pandas如果我读取A作为dask数据帧,以下命令工作:A.groupby('ID' )['value']。apply(lambda x:x.fillna(method ='ffill'))然而,在我感兴趣的大数据集中,我得到以下错误:ValueError:无法将字符串转换为float:T – dleal