亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

按值查找用戶排名

按值查找用戶排名

千萬里不及你 2022-08-16 10:13:51
如何按值查找用戶的排名。data = [        {            "playerId": 2,            "value": 196763.8        },        {           "playerId": 3,           "value": 196763.8        },        {           "playerId": 44,           "value": 196764        }]我試過:index = [ x['playerId'] for x in data ].index(3) #3 playerIdrank = index+1我得到的排名是:2對于玩家 Id 2 和 3,排名應為 1(因為值與 196763.8 相同),對于玩家 Id 44,排名應為 2
查看完整描述

2 回答

?
慕萊塢森

TA貢獻1810條經驗 獲得超4個贊

您可以使用 ,即:pandas


df = pd.DataFrame(data)

df['rank'] = df['value'].rank(ascending=True, method="min").astype(int)

df = df.sort_values(by=['rank']).reset_index(drop=True)

for i in range(1, len(df)):

    last, curr = df.loc[i-1, 'rank'], df.loc[i, 'rank']

    df.loc[i, 'rank'] = last + 1 if last < curr else last


print(df)

   playerId     value  rank

0         2  196763.8     1

1         3  196763.8     1

2        44  196764.0     2


查看完整回答
反對 回復 2022-08-16
?
天涯盡頭無女友

TA貢獻1831條經驗 獲得超9個贊

您需要按以下條件對列表進行排序,并查找某些列表是否與其他列表具有相同的分數,并將它們合并為一個。valueplayer_id


這應該可以解決問題:


from collections import defaultdict


new_dict = defaultdict(list)

for x in data:

    new_dict[x['value']].append(x['playerId'])  


rank_list = [[k,v] for k,v in new_dict.items()]

# Set reverse=False if lower score is considered higher rank

rank_list.sort(key=lambda k: k[0], reverse=True) 

def get_rank(player_id):

    for i in range(len(rank_list)):

        if player_id in rank_list[i][1]:


            return i+1 # list is 0 indexed thus +1


print('Rank is %s for player id %s' % (get_rank(44), 44))

> Rank is 1 for player id 44

print('Rank is %s for player id %s' % (get_rank(2), 2))

> Rank is 2 for player id 2

print('Rank is %s for player id %s' % (get_rank(3), 3))

> Rank is 2 for player id 3


查看完整回答
反對 回復 2022-08-16
  • 2 回答
  • 0 關注
  • 118 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號