Polars中group_by用字典聚合求和报错,求解决方案
Polars分组聚合报TypeError的解决方法
问题原因
你遇到的TypeError: specifying aggregations as a dictionary is not supported错误,是因为Polars的agg方法不支持字典格式的聚合参数——这种写法是pandas的惯用方式,但Polars的API设计要求使用其专属的表达式语法传递聚合操作。
修正方案
有两种常用的正确写法可以实现你需要的分组求和:
方法1:使用列表达式+聚合函数
通过pl.col("value").sum()指定对value列求和,并用alias保持列名不变:
import polars as pl df = pl.DataFrame({"category": ["A", "A", "B", "B", "B"], "value": [1., 2., 3., 4., 5.]}) result = df.group_by("category").agg(pl.col("value").sum().alias("value")) print(result)
方法2:直接用聚合函数指定列名
pl.sum可以直接接收列名作为参数,再通过alias指定输出列名:
result = df.group_by("category").agg(pl.sum("value").alias("value"))
运行结果
执行修正后的代码,会得到符合预期的分组求和结果:
┌──────────┬───────┐ │ category ┆ value │ │ --- ┆ --- │ │ str ┆ f64 │ ╞══════════╪═══════╡ │ A ┆ 3.0 │ │ B ┆ 12.0 │ └──────────┴───────┘
注:你预期结果里标注的
list[f64]是错误的,分组求和后会得到单个f64值而非列表,上述输出是Polars的正确显示格式。
内容的提问来源于stack exchange,提问作者Jose Nuñez
相关产品推荐
相关产品推荐

