gpt4 book ai didi

python - Dask 数据框中的多个聚合用户定义函数

转载 作者:太空狗 更新时间:2023-10-30 01:18:24 26 4
gpt4 key购买 nike

我正在使用 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:

最佳答案

Realised Dask 提供了一个 Aggregation data structure .自定义聚合可以按如下方式完成:

# Concatenates the strings and separates them using ","
custom_concat = dd.Aggregation('custom_sum', lambda x: ",".join(str(x)), lambda x0: ",".join(str(x0)))
custom_concat_E = ...

atts_to_group = {'A', 'B'}
agg_fn = {
'C': 'mean' #int
'D': custom_concat_D
'E': custom_concat_E
}
ddf = ddf.groupby(atts_to_group).agg(agg_fn).compute().reset_index()

这也可以通过 Dataframe.apply 来完成,以获得更简洁的解决方案

def agg_fn(x):
return pd.Series(
dict(
C = x['C'].mean(), # int
D = "{%s}" % ', '.join(x['D']), # string (concat strings)
E = ...
)
)

ddf = ddf.groupby(atts_to_group).apply(agg_fn).compute().reset_index

关于python - Dask 数据框中的多个聚合用户定义函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52149746/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com