如何在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
相关产品推荐
相关产品推荐

