首页 > 解决方案 > 查找 Dask 数据框中多列的中值

问题描述

我有一个包含三列、宽度、高度和长度的 Dask 数据框。我需要创建第四列,这是三列的中位数。

我的带有常规 pandas df 的代码不起作用,因为中位数不是 Dask 中的函数。

columns_to_sum = ['weight', 'height', 'length']
df['median'] = df[columns_to_sum].median(axis=1)

任何帮助表示赞赏!

标签: pythonpandasdask

解决方案


虽然平行中位数确实很难,但在这种情况下,提问者询问的是跨列的中位数。这很容易,因为对于每一行,我们的所有数据都已经在内存中。

如果这尚不存在,则应将其添加到 Dask Dataframe。如果您想在https://github.com/dask/dask/issues/new提出问题,那将是受欢迎的。

作为一种短期解决方法,您始终可以使用 Pandas 函数和 map_partitions

def f(df: pandas.DataFrame, columns: list) -> pandas.DataFrame:
    df = df.copy()  # dask prefers that you not mutate inputs
    df["median"] = df[columns].median(axis=1)

ddf = ddf.map_partitions(f, columns=["a", "b", "c"])

推荐阅读