【问题标题】:Panda ranking: move certain value to bottom熊猫排名:将某个值移到底部
【发布时间】:2020-04-30 12:33:40
【问题描述】:

我想根据其他一些变量为数据框创建加权排名(参见下面的示例)。但是,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】:

    IIUC,我认为您可以在创建rankna_option 之前使用mask 将0 替换为nan,但切勿将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
    

    【讨论】:

      猜你喜欢
      • 2021-07-10
      • 2016-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多