在 Dask 数据框中命名返回的聚合列

Naming returned aggregate columns in Dask dataframes

使用 Pandas v0.25 及更高版本时,我可以生成具有自定义名称的聚合列 using an elegant native syntax:

import pandas as pd

data = {"x": [1, 1, 2], "y": [-1, 0, 0]}
pd_df = pd.DataFrame(data)

this_is_valid = pd_df.groupby("x").agg(my_custom_name=("y", "mean"))

但是,当我尝试使用 Dask 数据框执行相同操作时,出现“意外的关键字参数”错误。

import dask.dataframe as dd
dask_df = dd.from_pandas(pd_df, npartitions=1)
blows_up = dask_df.groupby("x").agg(my_custom_name=("y", "mean"))

有没有一种直接的方法可以使用 Dask 完成此操作(并且不求助于 rename 函数),或者只是不支持此功能?如果不支持,是否有根本原因不支持?

Dask 有 docs on performing custom aggregations。他们讨论了计算均值的情况,以及它如何比 pandas 对应物更复杂:

Many reductions can only be implemented with multiple temporaries. To implement these reductions, the steps should return tuples and expect multiple arguments. A mean function can be implemented as:

custom_mean = dd.Aggregation(
    'custom_mean',
    lambda s: (s.count(), s.sum()),
    lambda count, sum: (count.sum(), sum.sum()),
    lambda count, sum: sum / count,
)
df.groupby('g').agg(custom_mean)

这暗示了处理所有类型的用户定义聚合所涉及的复杂性,但提供了如何实现它们的很好的概述。

至于重命名该列,我看不出有一种方法可以一步完成(目前)。这可能是错误的,我相信这在未来可能会改变。 dask 中的复杂重塑操作与它们的 pandas 对应物有很大不同,因为它们需要使用数据分区并考虑各种数据位置,因此复制完整的 pandas [=22= 并非易事].平衡笔记本电脑、分布式集群和高性能计算设施(dask 部署的范围相当广泛)的性能考虑与来自用户的许多功能请求对于 dask 开发人员来说是一个真正的挑战。

一般来说,对于开源项目“为什么不存在”的回答是“如果你想贡献它,欢迎 PR!”。 See dask's development guidelines 一个很好的贡献介绍。