如何在Polars中按列索引选择列并实现分组聚合?
在Polars中按列索引选择列并分组聚合
Polars完全支持按列索引选择列,而且实现分组聚合的方式比Pandas更简洁直观,不需要手动构造字典映射。
针对你的需求(按Common_name分组,对第32到103列求均值),可以用以下两种方式实现:
方式一:直接使用列索引切片聚合
利用Polars的pl.col支持索引切片的特性,直接在聚合操作中指定列范围:
import polars as pl gb = df.groupby("Common_name").agg(pl.col[32:103].mean())
这里pl.col[32:103]会选中从第32列到第102列(遵循Python左闭右开的切片规则,和Pandas的iloc[:,32:103]范围完全匹配),然后对这些列统一计算均值。
方式二:先获取列名列表再聚合
如果你需要先明确拿到目标列的名称,也可以先通过索引切片提取列名,再逐个指定聚合操作:
cols_to_agg = df.columns[32:103] gb = df.groupby("Common_name").agg([pl.col(col).mean() for col in cols_to_agg])
这种方式和你Pandas中的实现逻辑更接近,但Polars的列表推导写法比构造字典更简洁。
额外说明
- Polars的列索引从0开始,和Pandas保持一致,不用担心索引偏移问题。
pl.col还支持更多灵活的切片方式,比如pl.col[32:]选中第32列及之后所有列,pl.col[:103]选中前103列,甚至pl.col[::2]选中偶数列,满足不同场景需求。- 聚合后的结果会自动保留原列名,和你用Pandas得到的输出结构一致。
内容的提问来源于stack exchange,提问作者plotmaster473
相关产品推荐
相关产品推荐

