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

如何用列表推导式生成Polars聚合函数并应用于DataFrame

问题:如何通过聚合函数列表批量生成Polars列?

假设我定义了一个聚合函数名称列表:

aggs=['sum','std','mean','min','max']

现有Polars DataFrame:

import polars as pl
df=pl.DataFrame({'a':[1,2,3], 'b':[2,3,4]})

我想实现类似以下伪代码的效果(直接运行会报错):

df.with_columns([pl.col('a').x() for x in aggs])

要求:

  • 支持为生成的列添加.name.suffix()后缀
  • aggs不一定是字符串列表,也可以是其他形式

解决方案

有两种可行的实现方式,完全匹配你想要的列表推导式写法:

方式1:针对字符串类型的聚合函数列表

用Python内置的getattr()方法,动态获取Polars列对象对应的聚合方法,调用后再添加后缀:

import polars as pl

aggs = ['sum', 'std', 'mean', 'min', 'max']
df = pl.DataFrame({'a':[1,2,3], 'b':[2,3,4]})

result = df.with_columns(
    [getattr(pl.col('a'), agg)().name.suffix(f'_{agg}') for agg in aggs]
)
print(result)

运行后会生成a_sum、a_std、a_mean等列,每个列对应a列的聚合结果。

方式2:直接使用聚合函数对象列表

如果不想用字符串,直接把Polars的聚合函数放进列表更直观,利用函数的__name__属性生成后缀:

import polars as pl

# 直接用Polars聚合函数对象构建列表
aggs = [pl.sum, pl.std, pl.mean, pl.min, pl.max]
df = pl.DataFrame({'a':[1,2,3], 'b':[2,3,4]})

result = df.with_columns(
    [agg(pl.col('a')).name.suffix(f'_{agg.__name__}') for agg in aggs]
)
print(result)

扩展:多列批量处理

如果要给DataFrame的所有列都应用这些聚合函数,只需要嵌套一层列表推导:

result = df.with_columns(
    [getattr(pl.col(col), agg)().name.suffix(f'_{agg}') 
     for col in df.columns for agg in aggs]
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 19:31:23