全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Polars GroupBy:如何高效忽略 NaN 值计算均值

在 polars 中,`mean()` 默认不忽略 nan,需显式调用 `drop_nans()` 或 `fill_nan(none)` 预处理,二者语义等价但性能表现随数据规模和分组数变化;推荐优先使用 `fill_nan(none).mean()` 以获得更优并行效率。

Polars 的聚合函数(如 pl.col("values").mean())默认将 NaN 视为有效值参与计算——一旦组内存在任意 NaN,整组均值即返回 NaN,这与 Pandas 的 nanmean 行为不一致。要实现“忽略 NaN 求均值”,最简洁、高效且符合 Polars 原生范式的方式是在聚合前清除 NaN 语义干扰,而非依赖 Python 层的 map_elements(因其破坏查询优化、无法向量化、严重拖慢性能)。

✅ 推荐方案:fill_nan(None).mean()
这是目前最优实践。fill_nan(None) 将 NaN 替换为 null(Polars 的缺失值原生表示),而 mean() 对 null 值天然跳过(无需额外配置):

import polars as pl
import numpy as np

test_data = pl.DataFrame({
    "group": ["A", "A", "B", "B"],
    "values": [1.0, np.nan, 2.0, 3.0]
})

result = test_data.group_by("group").agg(
    pl.col("values").fill_nan(None).mean().alias("mean_ignore_nan")
)
print(result)

输出:

shape: (2, 2)
┌───────┬────────────────┐
│ group ┆ mean_ignore_nan │
│ ---   ┆ ---             │
│ str   ┆ f64             │
╞═══════╪═════════════════╡
│ A     ┆ 1.0             │
│ B     ┆ 2.5             │
└───────┴─────────────────┘

⚠️ 替代方案:drop_nans().mean() 同样正确,但实测在大数据量(如亿级行)下略慢于 fill_nan(None)。其原理是物理删除 NaN 元素后再计算,而 fill_nan(None) 仅做标记替换,更利于底层内存布局优化与多线程调度。

? 性能关键洞察:

  • 1 亿行、20% NaN、少量分组 场景下,fill_nan(None).mean() 比 drop_nans().mean() 快约 1.6×(737ms vs 1210ms);
  • 但当分组数急剧增加(如数千组),drop_nans() 的并行粒度优势可能反超——建议在实际业务数据上用 %timeit 验证;
  • 二者结果完全一致,且均远快于 map_elements(lambda x: np.nanmean(x.to_numpy()))(后者在亿级数据上可能慢 10–100 倍)。

? 注意事项:

  • fill_nan(None) 仅影响当前表达式链,不修改原始列;
  • 若列中同时存在 null 和 NaN,fill_nan(None) 会将 NaN 转为 null,之后 mean() 自动统一忽略所有 null;
  • 确保数值列类型为浮点型(如 f64),整型列无法存储 NaN,需先 cast(pl.Float64);
  • 使用 maintain_order=True 可保留分组输出顺序,便于调试或下游确定性消费。

总之,摒弃 map_elements,拥抱 fill_nan(None).mean() —— 它是 Polars 原生、可优化、高性能且语义清晰的标准解法。


# python  # 大数据  # ai  # 聚合函数 


相关文章: 网站制作公司排行榜,四大门户网站排名?  制作网站的软件免费下载,免费制作app哪个平台好?  网站制作软件有哪些,制图软件有哪些?  ,如何利用word制作宣传手册?  C#如何序列化对象为XML XmlSerializer用法  网站制作说明怎么写,简述网页设计的流程并说明原因?  如何通过VPS建站实现广告与增值服务盈利?  网站制作知乎推荐,想做自己的网站用什么工具比较好?  建站主机与虚拟主机有何区别?如何选择最优方案?  如何快速查询网站的真实建站时间?  如何选择高效可靠的多用户建站源码资源?  如何在Golang中实现微服务服务拆分_Golang微服务拆分与接口管理方法  如何通过宝塔面板实现本地网站访问?  网站专业制作公司有哪些,做一个公司网站要多少钱?  建站之星上传入口如何快速找到?  php json中文编码为null的解决办法  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?  建站之星安装步骤有哪些常见问题?  网站制作免费,什么网站能看正片电影?  建站之星如何快速更换网站模板?  网站制作多少钱一个,建一个论坛网站大约需要多少钱?  怀化网站制作公司,怀化新生儿上户网上办理流程?  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  高端企业智能建站程序:SEO优化与响应式模板定制开发  建站主机是否属于云主机类型?  如何用AWS免费套餐快速搭建高效网站?  定制建站策划方案_专业建站与网站建设方案一站式指南  C#怎么使用委托和事件 C# delegate与event编程方法  建站VPS推荐:2025年高性能服务器配置指南  如何高效配置香港服务器实现快速建站?  专业网站制作企业网站,如何制作一个企业网站,建设网站的基本步骤有哪些?  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】  如何快速搭建高效服务器建站系统?  微网站制作教程,我微信里的网站怎么才能复制到浏览器里?  如何在西部数码注册域名并快速搭建网站?  如何在建站宝盒中设置产品搜索功能?  制作网站的基本流程,设计网站的软件是什么?  太原网站制作公司有哪些,网约车营运证查询官网?  建站主机服务器选购指南:轻量应用与VPS配置解析  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  PHP 500报错的快速解决方法  建站之星CMS五站合一模板配置与SEO优化指南  网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?  洛阳网站制作公司有哪些,洛阳的招聘网站都有哪些?  如何通过IIS搭建网站并配置访问权限?  建站VPS能否同时实现高效与安全翻墙?  公司网站制作价格怎么算,公司办个官网需要多少钱? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。