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

使用Polars将多行数据重映射为列格式的实现方法

Polars长格式转稀疏宽格式的高效实现

需求场景

现有稀疏数据集的长格式Polars DataFrame:

df = pl.from_repr("""
┌─────┬─────┬───────┐
│ id  ┆ key ┆ value │
│ --- ┆ --- ┆ ---   │
│ str ┆ str ┆ i64   │
╞═════╪═════╪═══════╡
│ a   ┆ m1  ┆ 1     │
│ a   ┆ m2  ┆ 2     │
│ a   ┆ m3  ┆ 1     │
│ b   ┆ m2  ┆ 4     │
│ c   ┆ m1  ┆ 2     │
│ c   ┆ m3  ┆ 6     │
│ d   ┆ m4  ┆ 4     │
│ e   ┆ m2  ┆ 1     │
└─────┴─────┴───────┘
""")

需要转换为如下列格式的稀疏表示:

shape: (5, 5)
┌─────┬──────┬──────┬──────┬──────┐
│ id  ┆ m1   ┆ m2   ┆ m3   ┆ m4   │
│ --- ┆ ---  ┆ ---  ┆ ---  ┆ ---  │
│ str ┆ i64  ┆ i64  ┆ i64  ┆ i64  │
╞═════╪══════╪══════╪══════╪══════╡
│ a   ┆ 1    ┆ 2    ┆ 1    ┆ null │
│ b   ┆ null ┆ 4    ┆ null ┆ null │
│ c   ┆ 2    ┆ null ┆ 6    ┆ null │
│ d   ┆ null ┆ null ┆ null ┆ 4    │
│ e   ┆ null ┆ 1    ┆ null ┆ null │
└─────┴──────┴──────┴──────┴──────┘

高效实现方法

直接使用Polars内置的pivot方法即可完成转换,该方法针对大数据量做了优化,天然适配稀疏场景:

wide_df = df.pivot(index='id', columns='key', values='value')

参数说明

  • index:指定作为行标识的列(这里是id)
  • columns:指定要转成列的字段(这里是key)
  • values:指定填充到新列中的值(这里是value)

转换后得到的wide_df完全符合目标格式,缺失值自动以null填充,完美匹配稀疏数据的存储需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 01:08:38