熊猫排名:将一定的数值移到底部

问题描述 投票:0回答:1

我想根据一些其他变量为一个数据框创建一个加权排名(见下面的例子)。然而,0意味着分数的数据缺失,因此该行应该得到最低的排名值。我知道关于 na_option的值,但我不希望改变在 Score 列。由于我想尝试不同的布尔组合,所以代码必须灵活地进行升序和降序。

    Id Score1 Score2 Score3
    1    5       0      8 
    2   -4       2      6
    3    3       1      5
    4    0      -4     -3

w1, w2, w3 = 0.4, 0,3, 0.3
boolean1, boolean2, boolean3 = True, False, True
df['tmp_rank1'] = df[Score1].rank(ascending=boolean1)
df['tmp_rank2'] = df[Score2].rank(ascending=boolean2)
df['tmp_rank3'] = df[Score3].rank(ascending=boolean3)
df['final_rank'] = df['tmp_rank1'] * w1 + df['tmp_rank2'] * w2 + df['tmp_rank3'] * w3
python pandas ranking
1个回答
1
投票

IIUC,我认为你可以使用 mask 在创建 rankna_option但从未将nan赋值回原来的列中

w1, w2, w3 = 0.4, 0.3, 0.3
boolean1, boolean2, boolean3 = True, False, True
df['tmp_rank1'] = df['Score1'].mask(df['Score1'].eq(0))\
                              .rank(ascending=boolean1, na_option='bottom')
df['tmp_rank2'] = df['Score2'].mask(df['Score2'].eq(0))\
                              .rank(ascending=boolean2, na_option='bottom')
df['tmp_rank3'] = df['Score3'].mask(df['Score3'].eq(0))\
                              .rank(ascending=boolean3, na_option='bottom')
df['final_rank'] = df['tmp_rank1'] * w1 + df['tmp_rank2'] * w2 + df['tmp_rank3'] * w3
© www.soinside.com 2019 - 2024. All rights reserved.