如何在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)
代码说明
- 类型转换与拼接:
cast(pl.List(pl.List(pl.Int64)))将元组转为Polars可处理的嵌套列表类型,arr.concat()把嵌套列表拼接成一维数组,统一了嵌套层级; - 转结构体展开:
list.to_struct()把一维数组转为结构体,unnest()直接展开为独立列,无论元组内包含多少个等长列表,这一步都能一次性完成; - 均值计算:直接调用
mean()方法即可得到所有列的均值。
这种方法避免了针对多层嵌套重复编写展开逻辑,扩展性更强,适配嵌套数量多变的场景。
内容的提问来源于stack exchange,提问作者lebesgue
相关产品推荐
相关产品推荐

