0

0

如何在 Polars 中将标量数值列高效广播加到列表列的每个元素上

碧海醫心

碧海醫心

发布时间:2026-01-14 09:09:17

|

404人浏览过

|

来源于php中文网

原创

如何在 Polars 中将标量数值列高效广播加到列表列的每个元素上

polars 1.10.0+ 支持列表列与标量列的原生广播算术运算,可直接使用 `pl.col("lst") + pl.col("val")` 实现逐元素相加,无需 `map_elements` 或嵌套 `list.eval`,简洁、安全且性能优异。

在 Polars 中对列表列(list[i64])执行“按行广播”式算术操作(如将 val 列的每个标量值加到对应 lst 列中每个元素上),曾长期受限于 list.eval 不支持跨列引用的限制。但自 Polars v1.10.0 起,该功能已原生支持——列表列与数值列之间的加减乘除等二元运算,会自动按行广播:即对第 i 行的 lst[i] 中每个元素,加上第 i 行的 val[i] 值。

✅ 推荐方案(简洁、高效、向量化):

import polars as pl

df = pl.DataFrame({
    'lst': [[0, 1], [9, 8]],
    'val': [3, 4]
})

result = df.with_columns(
    lst=pl.col("lst") + pl.col("val")  # 直接相加,自动广播
)
print(result)

输出:

shape: (2, 2)
┌───────────┬─────┐
│ lst       ┆ val │
│ ---       ┆ --- │
│ list[i64] ┆ i64 │
╞═══════════╪═════╡
│ [3, 4]    ┆ 3   │
│ [13, 12]  ┆ 4   │
└───────────┴─────┘

⚠️ 注意事项:

你好星识
你好星识

你的全能AI工作空间

下载
  • 此语法仅适用于 Polars ≥ 1.10.0。旧版本会报错或静默失败,请先检查版本:pl.__version__。
  • 列表长度无需一致(如 [[1], [2, 3, 4]]),广播逻辑天然兼容变长列表。
  • 支持所有标准算术运算符:+, -, *, /, //, %, **。
  • 若需更复杂逻辑(如条件加法、调用自定义函数),仍需 list.eval(pl.element().apply(...)) 或 map_elements,但应尽量避免后者(非向量化、无类型推断、性能较差)。

? 替代方案(兼容旧版本,但稍冗余):
若必须支持

# 仅当列表长度一致时推荐;否则需处理缺失字段
result_legacy = df.with_columns(
    lst=pl.col("lst").list.to_struct(n_field_strategy="max_width")
         + pl.struct(pl.col("val"))
).select(
    pl.col("lst").struct.field("*").alias("lst"),  # 展开为列表(需后续转回)
    "val"
)

但此方式返回 struct 类型,且转换回 list 需额外步骤(如 struct.unnest() + list.from_columns),远不如原生广播直观。

? 总结:升级至 Polars 1.10.0+ 后,pl.col("lst") + pl.col("val") 是最优雅、最高效、最符合 Polars 设计哲学的解决方案——它完全利用底层 Arrow 的向量化能力,零额外开销,代码可读性极佳,应作为首选实践。

相关专题

更多
java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1463

2023.10.24

Go语言中的运算符有哪些
Go语言中的运算符有哪些

Go语言中的运算符有:1、加法运算符;2、减法运算符;3、乘法运算符;4、除法运算符;5、取余运算符;6、比较运算符;7、位运算符;8、按位与运算符;9、按位或运算符;10、按位异或运算符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

228

2024.02.23

php三元运算符用法
php三元运算符用法

本专题整合了php三元运算符相关教程,阅读专题下面的文章了解更多详细内容。

85

2025.10.17

golang结构体相关大全
golang结构体相关大全

本专题整合了golang结构体相关大全,想了解更多内容,请阅读专题下面的文章。

195

2025.06.09

golang结构体方法
golang结构体方法

本专题整合了golang结构体相关内容,请阅读专题下面的文章了解更多。

187

2025.07.04

golang结构体相关大全
golang结构体相关大全

本专题整合了golang结构体相关大全,想了解更多内容,请阅读专题下面的文章。

195

2025.06.09

golang结构体方法
golang结构体方法

本专题整合了golang结构体相关内容,请阅读专题下面的文章了解更多。

187

2025.07.04

php与html混编教程大全
php与html混编教程大全

本专题整合了php和html混编相关教程,阅读专题下面的文章了解更多详细内容。

1

2026.01.13

PHP 高性能
PHP 高性能

本专题整合了PHP高性能相关教程大全,阅读专题下面的文章了解更多详细内容。

5

2026.01.13

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Java 教程
Java 教程

共578课时 | 45.7万人学习

国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 1.0万人学习

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

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