python - 查找 Dask 数据框中多列的中值
问题描述
我有一个包含三列、宽度、高度和长度的 Dask 数据框。我需要创建第四列,这是三列的中位数。
我的带有常规 pandas df 的代码不起作用,因为中位数不是 Dask 中的函数。
columns_to_sum = ['weight', 'height', 'length']
df['median'] = df[columns_to_sum].median(axis=1)
任何帮助表示赞赏!
解决方案
虽然平行中位数确实很难,但在这种情况下,提问者询问的是跨列的中位数。这很容易,因为对于每一行,我们的所有数据都已经在内存中。
如果这尚不存在,则应将其添加到 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"])
推荐阅读
- apache-spark - 使用分隔符拆分字符串并在 in 语句中使用它
- google-analytics - 使用 utm 参数在时事通讯点击上获取用户电子邮件
- rest - 使用 Microsoft Graph REST API 隐藏文件夹
- r - 清理天气数据并计算平均值
- visual-studio-code - 可以从命令行调用 VSCode 扩展命令吗?
- apache-spark - 为什么 Spark 会选择在单个节点上完成所有工作?
- mysql - MySQL合并非空值与其他case when和coalesce语句冲突-不确定如何修复
- php - 尝试在自定义帮助程序中访问别名会引发“未找到”消息。拉拉维尔 5.7
- node.js - NodeJS 的 UDP 代理
- python - 如何使用 QPainter + QPixmap 实现鼠标绘图?