Polars:按 Int64 列旋转不保持数字顺序

Polars: Pivoting by Int64 column not keeping numeric order

我有一个名为 VERSION_INDEX 的列,它是 Int64 并且是一个代理,用于保持排序的语义软件版本列表,以便 0.2.0 在 0.13.0 之后。当我进行数据透视时,从数据透视创建的列名称按字母数字顺序排序。

pivot_df = merged_df.pivot(index=test_events_key_columns, columns='VERSION_INDEX', values='Status')
print(pivot_df)

是否可以在数据透视期间保持列顺序为数字,使 9 在 87 之前?

感谢

在 Polars 中,列名称始终存储为字符串,因此您使用字母数字排序而不是数字排序。没有绕过字符串的方法,所以我认为你能做的最好的就是计算你想要的列顺序,然后 select 列:

import polars as pl

df = pl.DataFrame({"version": [9, 85, 87], "testsuite": ["scan1", "scan2", "scan3"], "status": ["ok"] * 3})
wide = df.pivot(index="testsuite", columns='version', values='status')
cols = df["version"].cast(pl.Utf8).to_list()
wide[["testsuite"] + cols]
┌───────────┬──────┬──────┬──────┐
│ testsuite ┆ 9    ┆ 85   ┆ 87   │
│ ---       ┆ ---  ┆ ---  ┆ ---  │
│ str       ┆ str  ┆ str  ┆ str  │
╞═══════════╪══════╪══════╪══════╡
│ scan1     ┆ ok   ┆ null ┆ null │
├╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌┼╌╌╌╌╌╌┼╌╌╌╌╌╌┤
│ scan2     ┆ null ┆ ok   ┆ null │
├╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌┼╌╌╌╌╌╌┼╌╌╌╌╌╌┤
│ scan3     ┆ null ┆ null ┆ ok   │
└───────────┴──────┴──────┴──────┘