You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Polars DataFrame/LazyFrame高性能应用自定义函数最优方案

Polars 自定义函数高性能应用方案咨询

向Polars的pl.DataFrame或pl.internals.lazy_frame.LazyFrame应用函数的最高效方式是什么?本问题承接自Stack Overflow相关提问《Apply Function to all columns of a Polars-DataFrame》。

现有需求与性能痛点

我当前的需求是拼接所有列后,使用Python标准库hashlib对值进行哈希计算,所用函数如下:

import hashlib

def hash_row(row):
    os.environ['PYTHONHASHSEED'] = "0"
    row = str(row).encode('utf-8')
    return hashlib.sha256(row).hexdigest()

该函数要求输入为字符串类型,意味着需要将其应用到pl.Series的每一个单元格:小数据量场景下该方案可正常运行,但当数据量接近1亿行时会出现严重的性能问题。
本次提问的核心:如何以最高性能在整个Polars Series上应用此类自定义函数?

Pandas侧参考实现

Pandas提供了多种创建新列的方式,不同方式性能差异极大:

  • 原生向量化调用(性能最优)
df['new_col'] = df['some_col'] * 100 # vectorized calls
  • 逐行apply调用(性能最差)
    为逐行逻辑编写自定义函数,通过apply接口指定按行遍历调用:
def apply_func(row):
   return row['some_col'] + row['another_col']

df['new_col'] = df.apply(lambda row: apply_func(row), axis=1) # using apply operations
  • NumPy向量化封装方案(性能优于逐行apply)
    基于NumPy的向量化封装实现也是Pandas侧常用的性能优化方案:
import numpy as np

def np_func(some_col, another_col):
   return some_col + another_col

vec_func = np.vectorize(np_func)

df['new_col'] = vec_func(df['some_col'].values, df['another_col'].values)

待解答问题

针对Polars框架,实现同类逐元素/逐行自定义函数调用的最优解决方案是什么?


内容的提问来源于stack exchange,提问作者Jenobi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 09:51:17