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

如何在Polars DataFrame中展平元组数组并计算列均值?

解决Polars嵌套结构展平及均值计算问题

核心思路

先将元组内的多个列表拼接为单个一维列表,再一次性转成结构体展开为列,这种方法无需根据嵌套层数重复编写list.to_struct和unnest,适配嵌套数量不固定的场景。

代码实现

import polars as pl

df = pl.DataFrame(
    {"a": [([1, 2, 3], [2, 3, 4], [6, 7, 8]), ([1, 2, 3], [3, 4, 5], [5, 7, 9])]}
)

# 展平嵌套结构为(2,9)的DataFrame
result_df = (
    df
    # 将元组转为列表嵌套类型,再拼接内部所有列表为一维数组
    .with_columns(pl.col("a").cast(pl.List(pl.List(pl.Int64))).arr.concat().alias("flattened"))
    # 将一维数组转为结构体并展开为单独列
    .select(pl.col("flattened").list.to_struct().unnest())
)

# 计算各列均值
column_means = result_df.mean()

# 输出结果
print("展平后的DataFrame:")
print(result_df)
print("\n各列均值:")
print(column_means)

代码说明

  1. 类型转换与拼接:cast(pl.List(pl.List(pl.Int64)))将元组转为Polars可处理的嵌套列表类型,arr.concat()把嵌套列表拼接成一维数组,统一了嵌套层级;
  2. 转结构体展开:list.to_struct()把一维数组转为结构体,unnest()直接展开为独立列,无论元组内包含多少个等长列表,这一步都能一次性完成;
  3. 均值计算:直接调用mean()方法即可得到所有列的均值。

这种方法避免了针对多层嵌套重复编写展开逻辑,扩展性更强,适配嵌套数量多变的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 12:57:16