熊猫排名:将特定值移至底部
Panda ranking: move certain value to bottom
我想根据其他一些变量为数据框创建加权排名(参见下面的示例)。但是,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
IIUC,我认为您可以在创建 rank
和 na_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
我想根据其他一些变量为数据框创建加权排名(参见下面的示例)。但是,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
IIUC,我认为您可以在创建 rank
和 na_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