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

如何在Polars LazyFrame中添加列总计行?

在Polars LazyFrame中添加列总计行的实现方法

基础数值列场景

如果你的LazyFrame全为数值类型,直接计算各列总和后拼接即可:

import polars as pl

# 示例LazyFrame
lf = pl.LazyFrame({
    "A": [1, 2, 3],
    "B": [4, 5, 6],
    "C": [7, 8, 9]
})

# 生成总计行,添加标识列区分数据行与总计行
total_row = lf.sum().with_columns(pl.lit("Total").alias("Row_Type"))

# 调整列顺序(可选,把标识列放首位)
total_row = total_row.select(["Row_Type", "A", "B", "C"])

# 拼接原数据与总计行,最后触发计算
result = pl.concat([lf.with_columns(pl.lit("Data").alias("Row_Type")), total_row]).collect()

print(result)

混合类型列场景

如果包含字符串、日期等非数值列,可以针对性处理:非数值列统一标记为"总计",数值列计算求和:

import polars as pl

lf = pl.LazyFrame({
    "Product": ["Apple", "Banana", "Orange"],
    "Sales": [100, 200, 300],
    "Stock": [50, 30, 20]
})

# 自动区分数值与非数值列
numeric_cols = lf.select(pl.col(pl.NUMERIC)).columns
non_numeric_cols = [col for col in lf.columns if col not in numeric_cols]

# 构建总计行:非数值列填"总计",数值列求和
total_row = pl.concat([
    pl.DataFrame({col: ["总计"] for col in non_numeric_cols}),
    lf.select(numeric_cols).sum()
], how="horizontal").lazy()

# 拼接并计算最终结果
result = pl.concat([lf, total_row]).collect()

print(result)

核心要点

  • 全程可保持LazyFrame的懒加载特性,直到调用collect()才触发实际计算,避免不必要的内存开销
  • pl.concat支持直接拼接LazyFrame,无需提前转换为DataFrame
  • 可根据业务需求灵活调整非数值列的标记内容,或忽略特定列的总计计算

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 21:55:58