命名 Dask 数据框中返回的聚合列
Posted
技术标签:
【中文标题】命名 Dask 数据框中返回的聚合列【英文标题】:Naming returned aggregate columns in Dask dataframes 【发布时间】:2021-12-29 12:45:07 【问题描述】:当使用 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
函数),还是不支持此功能?如果不是,是否有根本原因无法支持?
【问题讨论】:
你的熊猫版本是什么? 【参考方案1】:Dask 有docs on performing custom aggregations。他们讨论了计算均值的情况,以及它比 pandas 对应物更复杂的原因:
许多缩减只能通过多个临时对象来实现。为了实现这些缩减,这些步骤应该返回元组并期望多个参数。平均函数可以实现为:
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 中复杂的 reshape 操作与其对应的 pandas 显着不同,因为它们需要处理数据分区并考虑各种数据位置,因此复制完整的 pandas API 并非易事。平衡笔记本电脑、分布式集群和高性能计算设施(dask 部署的范围非常广泛)与用户的许多功能请求的性能考虑是 dask 开发人员面临的真正挑战。
一般来说,开源项目的“为什么不存在”的答案是“如果你想贡献它,欢迎 PRs!”。 See dask's development guidelines 提供了一个很好的贡献介绍。
【讨论】:
以上是关于命名 Dask 数据框中返回的聚合列的主要内容,如果未能解决你的问题,请参考以下文章