假设我有一列 FICO 分数。我想创建另一列 FICO_DECILE,对 FICO 分数进行降序排列并分配一个十分位数组,即 FICO=850 将具有 FICO_DECILE=1,而像 FICO=360 这样的列将具有 FICO_DECILE=10。
我尝试过:
# decile rank
df1 = df.with_columns(
(
(pl.col('fico').rank(method='dense')/df.height*10).cast(pl.UInt32).alias('fico_decile')
)
)
但我只得到 DECILE_GROUP 等于 0 和 null。
我还没有测试过,但这应该有效,总的来说,我认为你走在正确的轨道上,你得到这个错误的主要原因基本上是你如何使用
rank()
。
首先,使用排名来确定十分位数,方法是将排名除以总行数并乘以 10。 这会调整数据每个十分位数的边界,然后乘以 10。
这是一段指导代码
df1 = df.with_columns(
(
(pl.col('fico').rank(method='min', reverse=True) / df.height * 10)
.ceil()
.cast(pl.UInt32)
.alias('fico_decile')
)
)