这里有一种使用
ordinal
排名超过
asset_number
。要添加前导0,我们使用
.str.pad_start
.
df.with_columns(
pl.coalesce(
"asset_number",
"PREFIX - "
+ pl.all()
.rank("ordinal")
.over("asset_number")
.cast(pl.String)
.str.pad_start(3, "0"),
)
)
输出:
shape: (8, 2)
ââââââââââââââââ¬âââââââââââââââ
â 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 â
ââââââââââââââââ´âââââââââââââââ
完整代码:
import polars as pl
df = pl.DataFrame(
{
"name": [
"Office Chair",
"Office Chair",
"Office Chair",
"Office Chair",
"Office Chair",
"Office Chair",
"Table",
"Table",
],
"asset_number": [
None,
None,
None,
"CMP - 001",
"CMP - 005",
None,
None,
"CMP - 007",
],
}
)
df = df.with_columns(
pl.coalesce(
"asset_number",
"PREFIX - "
+ pl.all()
.rank("ordinal")
.over("asset_number")
.cast(pl.String)
.str.pad_start(3, "0"),
)
)
print(df)