python - Dask DataFrame 聚合至中位数

标签 python dask

我正在尝试将 dask 数据帧聚合为一组指标,包括中位数,但看起来不支持该中位数。有机会聚合并获得中位数吗?

st_agg = df.groupby(['start station id', 'end station id']).agg({'usertype':'count', 'tripduration':'median'})

>>> ValueError: unknown aggregate median

最佳答案

截至 2021 年 10 月 6 日,Dask 尚未实现此功能。有一个开放的功能请求 here .

特定情况的解决方法

针对同一个问题,下面的代码适用于特定用例,其中每个分组列的数据恰好适合 1 个分区:

ddf = dask.datasets.timeseries()
ddf = ddf.set_index('id')

median_fun = dd.Aggregation(
    name="median",
    # this computes the median on each partition
    chunk=lambda s: s.median(),
    # this combines results across partitions; the input should just be a list of length 1
    agg=lambda s0: s0.sum(),
)

median_ddf = ddf.groupby("id")["x"].agg(median_fun)

通用解决方案

对于较大的数据集,您可以构建一个自定义聚合函数,使用“dd.groupby.Aggregation”计算中位数(或第 50 个百分位数)。如果您这样做,请考虑将其作为 PR 提交以解决上面列出的功能请求。

请参阅此处的文档:https://docs.dask.org/en/stable/generated/dask.dataframe.groupby.Aggregation.html#dask-dataframe-groupby-aggregation

中位数与第 50 个百分位

请注意,对于大多数实际用途,在处理大型数据集时,第 50 个百分位数和中位数是等效的: https://math.stackexchange.com/questions/2048470/is-50th-percentile-equal-to-median

关于python - Dask DataFrame 聚合至中位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43812272/

相关文章:

python - 了解 Numpy rot90 轴

python - 将 python 实用函数导入 jupyter 笔记本

python - 将列表写入 csv 中的特定列

python - arccos 中遇到 dask/python 无效值

python - Scikit train_test_split 按指数

Python 多处理抛出 Killed : 9

python - 在python的Dask.multiprocessing中有一个共享对象

python - 使用 Dask DataFrame 计算前向差异?

python - dask dataframe 读取 parquet 架构差异

python - sqlalchemy.exc.OperationalError : (pymysql. err.OperationalError)(2013, 'Lost connection to MySQL server during query')