【发布时间】:2019-02-08 12:15:12
【问题描述】:
我正在使用 Dask 处理数据集(考虑到它不适合内存),我想根据列及其类型使用不同的聚合函数对实例进行分组。
Dask 有一组用于数值数据类型的默认聚合函数,但不适用于字符串/对象。有没有办法为字符串实现用户定义的聚合函数,有点类似于下面的示例?
atts_to_group = {'A', 'B'}
agg_fn = {
'C': 'mean' #int
'D': 'concatenate_fn1' #string - No default fn for strings - Doesn't work
'E': 'concatenate_fn2' #string
}
ddf = ddf.groupby(atts_to_group).agg(agg_fn).compute().reset_index()
此时,我可以在删除不相关的列/行时读取内存中的整个数据集,但我更喜欢在 Dask 中继续处理,因为它可以更快地执行所需的操作。
编辑: 尝试将自定义函数直接添加到字典中:
def custom_concat(df):
...
return df_concatd
agg_fn = {
'C': 'mean' #int
'D': custom_concat(df)
}
-------------------------------------------------------
ValueError: unknown aggregate Dask DataFrame Structure:
【问题讨论】:
-
如果 dask 类似于 pandas,您可以引用用户定义的函数。简单地不要用字符串文字来调用它,当然它应该存在,用
def或lambda定义,接收一个系列参数并返回一个系列。请显示功能分配。并且 不起作用 没有帮助。发布错误/不想要的结果。 -
@Parfait 我刚刚意识到有一个服装聚合功能。我在下面的答案中以两种不同的方式实现了解决方案。
标签: python dataframe group-by aggregation dask