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

如何用带递增编号的前缀替换Polars数据框中的空值?

替换Polars数据框空值为带递增编号的唯一前缀值

全局递增编号方案

如果需要给所有asset_number列的空值生成全局唯一的递增编号,可使用以下代码:

import polars as pl

# 原始数据框
df = pl.from_repr("""
┌──────────────┬──────────────┐
│ name         ┆ asset_number │
│ ---          ┆ ---          │
│ str          ┆ str          │
╞══════════════╪══════════════╡
│ Office Chair ┆ null         │
│ Office Chair ┆ null         │
│ Office Chair ┆ null         │
│ Office Chair ┆ CMP - 001    │
│ Office Chair ┆ CMP - 005    │
│ Office Chair ┆ null         │
│ Table        ┆ null         │
│ Table        ┆ CMP - 007    │
└──────────────┴──────────────┘
""")

# 替换空值为带递增编号的前缀值
df = df.with_columns(
    # 为所有空值生成从1开始的全局递增序号
    pl.col("asset_number").is_null().cum_count().add(1).alias("null_idx")
).with_columns(
    pl.when(pl.col("asset_number").is_null())
    .then(pl.format("PREFIX - {:03d}", pl.col("null_idx")))
    .otherwise(pl.col("asset_number"))
    .alias("asset_number")
).drop("null_idx")

print(df)

执行后输出结果:

┌──────────────┬──────────────┐
│ name         ┆ asset_number │
│ ---          ┆ ---          │
│ str          ┆ str          │
╞══════════════╪══════════════╡
│ Office Chair ┆ PREFIX - 001 │
│ Office Chair ┆ PREFIX - 002 │
│ Office Chair ┆ PREFIX - 003 │
│ Office Chair ┆ CMP - 001    │
│ Office Chair ┆ CMP - 005    │
│ Office Chair ┆ PREFIX - 004 │
│ Table        ┆ PREFIX - 005 │
│ Table        ┆ CMP - 007    │
└──────────────┴──────────────┘

按分组递增编号方案

如果需要按name列分组,让每个分组内的空值单独生成递增编号,可修改为以下代码:

df = df.with_columns(
    # 按name分组,为组内空值生成从1开始的递增序号
    pl.col("asset_number").is_null().cum_count().add(1).over("name").alias("null_idx")
).with_columns(
    pl.when(pl.col("asset_number").is_null())
    .then(pl.format("PREFIX - {:03d}", pl.col("null_idx")))
    .otherwise(pl.col("asset_number"))
    .alias("asset_number")
).drop("null_idx")

print(df)

执行后输出结果:

┌──────────────┬──────────────┐
│ name         ┆ asset_number │
│ ---          ┆ ---          │
│ str          ┆ str          │
╞══════════════╪══════════════╡
│ Office Chair ┆ PREFIX - 001 │
│ Office Chair ┆ PREFIX - 002 │
│ Office Chair ┆ PREFIX - 003 │
│ Office Chair ┆ CMP - 001    │
│ Office Chair ┆ CMP - 005    │
│ Office Chair ┆ PREFIX - 004 │
│ Table        ┆ PREFIX - 001 │
│ Table        ┆ CMP - 007    │
└──────────────┴──────────────┘

代码说明

  • pl.col("asset_number").is_null():标记出asset_number列的空值行
  • cum_count().add(1):对空值行累计计数并加1,让序号从1开始(默认从0起始)
  • pl.format("PREFIX - {:03d}", ...):将序号格式化为三位补零的数字,与前缀拼接成目标格式
  • over("name"):仅在需要分组编号时添加,实现分组内独立计数逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 17:12:45