Polars数据聚合与旋转实战教程
在这篇博文中,我们的目标是解决数据爱好者提出的一个常见问题:如何有效地从Polars DataFrame中创建汇总视图,以便在不同时间段或类别之间轻松进行比较。我们将使用一个实际的数据集示例来探索实现这一目标的各种方法。
Polars简介
Polars 是一个用 Rust 编写的高性能数据处理库,用于 Python 和 R 等语言。它在处理大型数据集时能够提供高效的数据处理能力,并且具有类似于 Pandas 的数据处理接口,方便数据科学家和分析师使用。
性能优势
并行计算:Polars 能够利用多核处理器进行并行计算。例如,在进行数据聚合操作(如计算列的平均值、总和等)或者数据筛选操作时,它可以将任务分配到多个核心上同时执行,大大提高了计算速度。相比传统的数据处理库,在处理大规模数据时这种并行计算的优势更加明显。
高效的内存管理:它对内存的使用非常高效,通过优化数据存储结构和算法,减少了不必要的内存占用。例如,在处理包含大量重复数据或者稀疏数据的数据集时,Polars 能够以更紧凑的方式存储数据,从而节省内存资源,并且能够更快地进行数据读写操作。
编译时优化:由于是用 Rust 编写,在编译阶段就可以进行许多性能优化。Rust 的编译器能够对代码进行诸如消除冗余计算、优化循环等操作,使得生成的机器码在执行时能够更高效地处理数据。
适用场景
大数据处理:在处理海量数据(如日志数据、物联网数据等)时,Polars 的高性能和高效内存管理能够发挥巨大优势,快速地进行数据清洗、转换和分析。
数据科学和分析:无论是进行探索性数据分析、数据建模还是数据可视化的前期数据处理,Polars 都可以作为一个高效的数据处理工具,帮助数据科学家更快地获取数据洞察。
数据管道构建:在构建数据管道时,需要对数据进行一系列的转换和处理操作。Polars 的高效性和丰富的数据操作方法使其成为构建数据管道的有力工具,可以确保数据在不同处理阶段的快速流动和处理。
数据聚合与旋转案例
为了说明聚合和旋转技术,让我们考虑一个简单的数据集。该数据集在几个月内跟踪不同渠道的发送和唯一id。这是我们初始数据集的样子:
import polars as pl
df = pl.DataFrame({"Channel": ["X", "X", "Y", "Y", "X", "X", "Y", "Y", "X", "X", "Y", "Y", "X", "X", "Y", "Y"],"ID": ["a", "b", "b", "a", "e", "b", "g", "h", "a", "a", "k", "a", "b", "n", "o", "p"],"Month": ["1", "2", "1", "2", "1", "2", "1", "2", "1", "2", "1", "2", "1", "2", "1", "2"]
})
转换目标
我们的目标是聚合数据并计算值,例如每个通道和每个月的唯一id数量和发送总数,并以一种方便进行月与月比较的方式显示它们。
所需的格式是数据透视表,显示不同的聚合功能,如“唯一ID”和“总发送”,每月作为列:
| Channels | agg_func | 1 | 2 |
|----------|-------------|---|---|
| X | Uniques ID | 3 | 3 |
| X | Total sends | 4 | 4 |
| Y | Uniques ID | 4 | 3 |
| Y | Total sends | 4 | 4 |
实现转换
- 使用
Pivot
和Aggregate
函数
使用polar实现这一目标的强大方法是利用pivot函数与聚合函数相结合来生成所需格式。下面将深入介绍如何有效地执行这些操作。
pv = df.pivot(on="Month",values="ID",aggregate_function=pl.concat_list(pl.element().n_unique().alias("value"),pl.element().count().alias("value"))
).with_columns(agg_func=["Uniques ID","Total sends"]).explode(pl.exclude("Channel"))
pv
该脚本在“Month”列上执行旋转操作,其中多个聚合函数连接在一个列表中。将结果展开,以便分离每个聚合值,输出结果如下:
shape: (4, 4)
┌─────────┬─────┬─────┬─────────────┐
│ Channel ┆ 1 ┆ 2 ┆ agg_func │
│ --- ┆ --- ┆ --- ┆ --- │
│ str ┆ u32 ┆ u32 ┆ str │
╞═════════╪═════╪═════╪═════════════╡
│ X ┆ 3 ┆ 3 ┆ Uniques ID │
│ X ┆ 4 ┆ 4 ┆ Total sends │
│ Y ┆ 4 ┆ 3 ┆ Uniques ID │
│ Y ┆ 4 ┆ 4 ┆ Total sends │
└─────────┴─────┴─────┴─────────────┘
- 使用多个Pivot 函数
另一种方法(手动但有效)是为每个想要应用的聚合函数执行单独的枢轴:
pl.concat([df.pivot(on="Month",values="ID",aggregate_function=agg_func).with_columns(pl.lit(agg_func_name).alias("agg_func"))for agg_func, agg_func_name in [(pl.element().n_unique(), "Uniques ID"), (pl.element().count(), "Total sends")]
])
数据结果如下:
shape: (4, 4)
┌─────────┬─────┬─────┬─────────────┐
│ Channel ┆ 1 ┆ 2 ┆ agg_func │
│ --- ┆ --- ┆ --- ┆ --- │
│ str ┆ u32 ┆ u32 ┆ str │
╞═════════╪═════╪═════╪═════════════╡
│ X ┆ 3 ┆ 3 ┆ Uniques ID │
│ Y ┆ 4 ┆ 3 ┆ Uniques ID │
│ X ┆ 4 ┆ 4 ┆ Total sends │
│ Y ┆ 4 ┆ 4 ┆ Total sends │
└─────────┴─────┴─────┴─────────────┘
- 旋转之前分组
或者,你可以首先使用group_by操作,在pivot之前基于“Month”和“Channel”预聚合数据:
(df.group_by("Month","Channel").agg(pl.col("ID").n_unique().alias("Uniques ID"),pl.col("ID").count().alias("Total sends")).unpivot(index=["Month","Channel"], variable_name="agg_func").pivot(on="Month", values="value")
)
总结
使用这些方法,可以在polar中有效地转换和汇总大型数据集,从而提高你的数据分析能力。无论是使用聚合列表的pivot函数,还是执行多个pivot以提高清晰度,这些策略都可以增强输出的可读性和可用性,特别是在处理大容量数据时。
相关文章:

Polars数据聚合与旋转实战教程
在这篇博文中,我们的目标是解决数据爱好者提出的一个常见问题:如何有效地从Polars DataFrame中创建汇总视图,以便在不同时间段或类别之间轻松进行比较。我们将使用一个实际的数据集示例来探索实现这一目标的各种方法。 Polars简介 Polars 是…...
引用类型集合的深拷贝,无需手动写循环:Apache Commons Lang (SerializationUtils)
在java中,我们如果想要对引用类型的集合进行深拷贝。有一种方式,就是调用SerializationUtils Apache Commons Lang (SerializationUtils) Apache Commons Lang 提供了 SerializationUtils 类,可以利用 Java 的序列化机制来进行集合及其元素…...

HTML、CSS表格的斜表头样式设置title 画对角线
我里面有用到layui框架的影响,实际根据你自己的框架来小调下就可以 效果如下 上代码 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-wi…...

docker 安装mysql 5.7 详细保姆级教程
1. 安装mysql(5.7) docker pull mysql:5.7 若是拉取不了,可以配置下 docker 源 2. 查看是否安装成功 docker images 下图就是成功了 3.创建mysql专用目录、数据挂载目录、配置文件目录 ,演示目录在于/home/下 //命令逐条执行cd /home/ mkdir mysql …...

Kioptrix level3
声明! 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&a…...

UE5 Lyra项目源码分析-关卡配置加载
最近刚学完一套教程,准备研究研究官方的源码,看看自己能不能看懂。 当前分析只在本人能力之下能够分析的内容,如果有一些问题,还请大家指出。 开始 如果你打开一个别人的项目,你会从哪里看起,如果是我&am…...

Cursor重置机器码-解决Too many free trials.
参考文章:如何绕过Cursor的机器绑定限制 前言 在前面这篇文章无限使用Cursor指南中,我提到使用 无限邮箱 或者 删除账号并重新注册 的方法,来无限使用Cursor免费版。但是当在本机登录过3个账号后,就会报这个“Too many free tria…...

transformer学习笔记-自注意力机制(2)
经过上一篇transformer学习笔记-自注意力机制(1)原理学习,这一篇对其中的几个关键知识点代码演示: 1、整体qkv注意力计算 先来个最简单未经变换的QKV处理: import torch Q torch.tensor([[3.0, 3.0,0.0],[0.5, 4…...
呼叫中心呼入大模型如何对接传统呼叫中心系统?
呼叫中心呼入大模型如何对接传统呼叫中心系统? 原作者:开源呼叫中心FreeIPCC,其Github:https://github.com/lihaiya/freeipcc 呼叫中心呼入大模型与传统呼叫中心系统的对接是一个复杂而细致的过程,涉及技术实现、流程…...

[Unity] Text文本首行缩进两个字符
Text文本首行缩进两个字符的方法比较简单。通过代码把"\u3000\u3000"加到文本字符串前面即可。 比如: 效果: 代码: TMPtext1.text "\u3000\u3000" "选择动作类型:";...

最新版Chrome浏览器加载ActiveX控件之Adobe PDF阅读器控件
背景 Adobe PDF阅读器控件是一个ActiveX控件,用于在Windows平台上显示和操作PDF文件。它提供了一系列方法和属性,可以实现对PDF文件的加载、显示、搜索、打印、保存等操作。 allWebPlugin中间件是一款为用户提供安全、可靠、便捷的浏览器插件服务的中间件…...
springboot 对接 ollama
spring ai 对接 ollama 引入依赖 <dependency><groupId>io.springboot.ai</groupId><artifactId>spring-ai-ollama-spring-boot-starter</artifactId><version>1.0.0</version> </dependency>这里因为使用的是快照版本所以需…...

【数据库】选择题+填空+简答
1.关于冗余数据的叙述中,不正确的是() A.冗余的存在容易破坏数据库的完整新 B.冗余的存在给数据库的维护增加困难 C.不应该在数据库中存储任何冗余数据 D.冗余数据是指由基本数据导出的数据 C 2.最终用户使用的数据视图称为(&…...

从0开始写android 之xwindow
模拟实现android的窗口系统本质上还是在ubuntu 上实现自己的窗口系统, xwindow是一套成熟的解决方案。在ubuntu上使用xwindow的好处之一 是ubuntu自带xwindow的库, 直接引用头文件和库文件。下面来了解下 xwindow的基本函数接口。 参考 https://tronche…...

The Past, Present and Future of Apache Flink
摘要:本文整理自阿里云开源大数据负责人王峰(莫问)在 Flink Forward Asia 2024上海站主论坛开场的分享,今年正值Flink开源项目诞生的第10周年,借此时机,王峰回顾了Flink在过去10年的发展历程以及 Flink社区…...

多模块应用、发布使用第三方库(持续更新中)
目录: 1、多模块概述(HAP、HSP、HAR) HAR与HSP两种共享包的主要区别体现在: 2、三类模块: 3、创建项目:项目名:meituan (1)创建Ability类型的Module,编译后为HAP文件…...

An error happened while trying to locate the file on the Hub and we cannot f
An error happened while trying to locate the file on the Hub and we cannot find the requested files in the local cache. Please check your connection and try again or make sure your Internet connection is on. 关于上述comfy ui使用control net预处理器的报错问…...

UE5安装Fab插件
今天才知道原来Fab也有类似Quixel Bridge的插件,于是立马就安装上了,这里分享一下安装方法 在Epic客户端 - 库 - Fab Library 搜索 Fab 即可安装Fab插件 然后重启引擎,在插件面板勾选即可 然后在窗口这就有了 引擎左下角也会多出一个Fab图标…...
Linux C语言操作sqlite3数据库
一、环境配置 1、下载源码:sqlite-autoconf-3470200.tar.gz 2、解压,cd到源码主目录 3、配置参数 ./configure --prefix/usr/local/ 如果是交叉编译环境 ./configure CC/opt/rk3288/gcc-linaro/bin/arm-linux-gnueabihf-gcc --hostarm-linux --pre…...
【人工智能】因果推断与数据分析:用Python探索数据间的因果关系
解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 因果推断是数据科学领域的一个重要方向,旨在发现变量间的因果关系,而不仅仅是相关性。本篇文章将从因果推断的理论基础出发,介绍因果关系的定义与建模方法,涵盖因果图(Causal Graph)、d-分离、反事实估计等…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...

ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...