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 │
└───────────┴──────┴──────┴──────┘
我有一个名为 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 │
└───────────┴──────┴──────┴──────┘