Polars是否存在按前缀匹配折叠列至结构体的内置功能?
Polars按前缀折叠列为结构体的内置实现方式
Polars提供了更简洁的内置分组聚合能力来实现这种按前缀折叠列的需求,无需手动逐个指定列构建结构体。
实现代码
import polars as pl pl.Config(tbl_cols=10) schema = ['x-latest', 'x-mean', 'x-std', 'y-latest', 'y-mean', 'y-std', 'z-latest', 'z-mean', 'z-std'] df = pl.DataFrame([range(n, n + 3) for n in range(0, 27, 3)], schema=schema) # 按列名前缀分组并折叠为结构体 result = df.select( pl.col("*") .group_by(lambda col_name: col_name.split("-")[0]) .agg(pl.struct(pl.all()).name.map(lambda prefix: f"{prefix}-stats")) ) print(result)
代码解释
pl.col("*"):选中DataFrame的所有列group_by(lambda col_name: col_name.split("-")[0]):通过列名分割后的前缀(x/y/z)对列进行分组agg(pl.struct(pl.all())):将每组内的列聚合为一个结构体,再通过name.map把结构体列重命名为{prefix}-stats格式
这种方式的优势在于无需提前维护前缀列表,后续新增同格式前缀的列(如w-latest、w-mean等)时,代码会自动适配,扩展性更强。
内容的提问来源于stack exchange,提问作者MYK
相关产品推荐
相关产品推荐

