0

0

使用 Polars 实现稀疏数据的行列转换(pivot 操作)

碧海醫心

碧海醫心

发布时间:2026-01-06 13:11:23

|

287人浏览过

|

来源于php中文网

原创

使用 Polars 实现稀疏数据的行列转换(pivot 操作)

本文介绍如何使用 polars 的 `pivot` 方法,将长格式稀疏数据(id-key-value 三列结构)高效转换为宽格式列向量表示,适用于大规模稀疏特征工程场景。

在处理稀疏特征数据(如用户行为日志、推荐系统特征、基因表达矩阵等)时,原始存储常采用「三元组」形式:id(实体标识)、key(特征名/指标名)、value(对应取值)。这种长格式(long format)节省空间且易于追加,但下游建模或向量化计算通常需要宽格式(wide format)——即每个 key 映射为独立列,每行对应一个 id 的完整特征向量。

Polars 提供了原生、高性能的 pivot 操作,可一键完成该转换。以下基于示例数据演示标准用法:

import polars as pl

df = pl.from_repr("""
┌─────┬─────┬───────┐
│ id  ┆ key ┆ value │
│ --- ┆ --- ┆ ---   │
│ str ┆ str ┆ i64   │
╞═════╪═════╪═══════╡
│ a   ┆ m1  ┆ 1     │
│ a   ┆ m2  ┆ 2     │
│ a   ┆ m3  ┆ 1     │
│ b   ┆ m2  ┆ 4     │
│ c   ┆ m1  ┆ 2     │
│ c   ┆ m3  ┆ 6     │
│ d   ┆ m4  ┆ 4     │
│ e   ┆ m2  ┆ 1     │
└─────┴─────┴───────┘
""")

# 执行 pivot:以 'key' 为新列名,'id' 为索引,'value' 为填充值
result = df.pivot(
    on="key",      # 将该列的唯一值展开为新列
    index="id",    # 将该列作为行索引(保留为行标识)
    values="value" # 用于填充新列单元格的值列
)

print(result)

输出结果即为目标宽格式 DataFrame:

趣问问AI
趣问问AI

免费可用的国内版chat,AI写作和AI对话

下载
shape: (5, 5)
┌─────┬──────┬──────┬──────┬──────┐
│ id  ┆ m1   ┆ m2   ┆ m3   ┆ m4   │
│ --- ┆ ---  ┆ ---  ┆ ---  ┆ ---  │
│ str ┆ i64  ┆ i64  ┆ i64  ┆ i64  │
╞═════╪══════╪══════╪══════╪══════╡
│ a   ┆ 1    ┆ 2    ┆ 1    ┆ null │
│ b   ┆ null ┆ 4    ┆ null ┆ null │
│ c   ┆ 2    ┆ null ┆ 6    ┆ null │
│ d   ┆ null ┆ null ┆ null ┆ 4    │
│ e   ┆ null ┆ 1    ┆ null ┆ null │
└─────┴──────┴──────┴──────┴──────┘

关键说明

  • pivot() 是 eager 模式专属 API(当前 Polars 版本中暂不支持 LazyFrame 直接调用),适合中等规模数据的即时转换;
  • 若需在 lazy pipeline 中使用,且已知所有 key 值(例如通过 df.get_column("key").unique().to_list() 预先获取),可改用 group_by("id").agg(...) + struct 展开 + unnest 组合实现等效逻辑(详见 Polars Pivot 文档);
  • 默认行为对重复 (id, key) 组合会报错,若存在冲突,需显式指定 aggregate_function(如 pl.first(), pl.sum());
  • 列类型自动推断:结果中各 key 列类型与原始 value 列一致(本例为 i64),缺失值统一填充为 null。

该方法比手动构造字典再拼接 DataFrame(如 Pandas 示例)更简洁、内存友好且执行更快,是 Polars 处理稀疏特征标准化流程的核心操作之一。

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Python 时间序列分析与预测
Python 时间序列分析与预测

本专题专注讲解 Python 在时间序列数据处理与预测建模中的实战技巧,涵盖时间索引处理、周期性与趋势分解、平稳性检测、ARIMA/SARIMA 模型构建、预测误差评估,以及基于实际业务场景的时间序列项目实操,帮助学习者掌握从数据预处理到模型预测的完整时序分析能力。

76

2025.12.04

Python 数据清洗与预处理实战
Python 数据清洗与预处理实战

本专题系统讲解 Python 在数据清洗与预处理中的核心技术,包括使用 Pandas 进行缺失值处理、异常值检测、数据格式化、特征工程与数据转换,结合 NumPy 高效处理大规模数据。通过实战案例,帮助学习者掌握 如何处理混乱、不完整数据,为后续数据分析与机器学习模型训练打下坚实基础。

12

2026.01.31

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

252

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

988

2024.03.01

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

866

2023.07.31

python中的format是什么意思
python中的format是什么意思

python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

455

2024.06.27

Swift iOS架构设计与MVVM模式实战
Swift iOS架构设计与MVVM模式实战

本专题聚焦 Swift 在 iOS 应用架构设计中的实践,系统讲解 MVVM 模式的核心思想、数据绑定机制、模块拆分策略以及组件化开发方法。内容涵盖网络层封装、状态管理、依赖注入与性能优化技巧。通过完整项目案例,帮助开发者构建结构清晰、可维护性强的 iOS 应用架构体系。

24

2026.03.03

C++高性能网络编程与Reactor模型实践
C++高性能网络编程与Reactor模型实践

本专题围绕 C++ 在高性能网络服务开发中的应用展开,深入讲解 Socket 编程、多路复用机制、Reactor 模型设计原理以及线程池协作策略。内容涵盖 epoll 实现机制、内存管理优化、连接管理策略与高并发场景下的性能调优方法。通过构建高并发网络服务器实战案例,帮助开发者掌握 C++ 在底层系统与网络通信领域的核心技术。

25

2026.03.03

Golang 测试体系与代码质量保障:工程级可靠性建设
Golang 测试体系与代码质量保障:工程级可靠性建设

Go语言测试体系与代码质量保障聚焦于构建工程级可靠性系统。本专题深入解析Go的测试工具链(如go test)、单元测试、集成测试及端到端测试实践,结合代码覆盖率分析、静态代码扫描(如go vet)和动态分析工具,建立全链路质量监控机制。通过自动化测试框架、持续集成(CI)流水线配置及代码审查规范,实现测试用例管理、缺陷追踪与质量门禁控制,确保代码健壮性与可维护性,为高可靠性工程系统提供质量保障。

77

2026.02.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号