推荐表排序数据框结果按降序排列 Pandas
Posted
技术标签:
【中文标题】推荐表排序数据框结果按降序排列 Pandas【英文标题】:Recommendations table sort dataframe result in descending order Pandas 【发布时间】:2020-10-13 17:54:51 【问题描述】:推荐表输出分数不是真正的下降,推荐与推荐表的分数不匹配。
目前,输入确实有效,并且确实给出了正确的 RecommendationTable_df。
recommendationTable_df = recommendationTable_df.sort_values(ascending=False)
注意:输出是正确的 RecommendationTable_df.head(6)
13 1.00
20 1.00
6 0.75
1 0.75
25 0.75
8 0.75
但是,当它去显示匹配结果时,显示 id 到 name 在评分顺序中它没有。
df.loc[df.index.isin(recommendationTable_df.head(6).keys())] #adjust the value of 6 here
此时,顺序不再降序或正确
但它可能是按我用来匹配名称的 id 进行排序
name herotype weapons spells
1 niem Sorcerer light crossbow, battleaxe Necromancy
6 sax Bard light crossbow, battleaxe, Dagger, sling, club Necromancy
8 wuc Sorcerer light crossbow, battleaxe Necromancy
13 Rolf Rylan Paladin light crossbow, battleaxe Necromancy
20 Braak Presley Paladin light crossbow, battleaxe, Dagger, sling, club Necromancy
25 Jantroph Paladin light crossbow, battleaxe Abjuration
分数的顺序应该按照分数的降序匹配输出和id。
这就是我想要实现的目标
userInput = [
'name':'Rolf Rylan', 'rating':1 #Their is no rating system is being used thus by default rating is set to 1
]
recommendationTable_df 与预期结果匹配,这不是真正的数据框
13 1.00 | 13 Rolf Rylan Paladin light crossbow, battleaxe Necromancy
20 1.00 | 20 Braak Presley Paladin light crossbow, battleaxe, Dagger, sling, club Necromancy
6 0.75 | 6 sax Bard light crossbow, battleaxe, Dagger, sling, club Necromancy
1 0.75 | 1 niem Sorcerer light crossbow, battleaxe Necromancy
25 0.75 | 25 Jantroph Paladin light crossbow, battleaxe Abjuration
8 0.75 | 8 wuc Sorcerer light crossbow, battleaxe Necromancy
我得到的结果与降序不匹配
13 1.00 | 1 niem Sorcerer light crossbow, battleaxe Necromancy
20 1.00 | 6 sax Bard light crossbow, battleaxe, Dagger, sling, club Necromancy
6 0.75 | 8 wuc Sorcerer light crossbow, battleaxe Necromancy
1 0.75 | 13 Rolf Rylan Paladin light crossbow, battleaxe Necromancy
25 0.75 | 20 Braak Presley Paladin light crossbow, battleaxe, Dagger, sling, club Necromancy
8 0.75 | 25 Jantroph Paladin light crossbow, battleaxe Abjuration
如何获得推荐数据框以匹配推荐表输出分数的顺序。
这是推荐表的输出分数 顺序正确
recommendationTable_df.head(6)
输出
13 1.00
20 1.00
6 0.75
1 0.75
25 0.75
8 0.75
dtype: float64
这就是它对分数的排序方式
#Multiply the genres by the weights and then take the weighted average
recommendationTable_df = ((genreTable*userProfile).sum(axis=1))/(userProfile.sum())
#Sort our recommendations in descending order
recommendationTable_df = recommendationTable_df.sort_values(ascending=False)
df.loc[df.index.isin(recommendationTable_df.head(6).keys())] #adjust the value of 6 here
这是当前的建议此顺序不正确
name herotype weapons spells
1 niem Sorcerer light crossbow, battleaxe Necromancy
6 sax Bard light crossbow, battleaxe, Dagger, sling, club Necromancy
8 wuc Sorcerer light crossbow, battleaxe Necromancy
13 Rolf Rylan Paladin light crossbow, battleaxe Necromancy
20 Braak Presley Paladin light crossbow, battleaxe, Dagger, sling, club Necromancy
25 Jantroph Paladin light crossbow, battleaxe Abjuration
这是我尝试或期望得到的结果
name herotype weapons spells
13 Rolf Rylan Paladin light crossbow, battleaxe Necromancy
20 Braak Presley Paladin light crossbow, battleaxe, Dagger, sling, club Necromancy
6 sax Bard light crossbow, battleaxe, Dagger, sling, club Necromancy
1 niem Sorcerer light crossbow, battleaxe Necromancy
25 Jantroph Paladin light crossbow, battleaxe Abjuration
8 wuc Sorcerer light crossbow, battleaxe Necromancy
基于输出
13 1.00
20 1.00
6 0.75
1 0.75
25 0.75
8 0.75
dtype: float64
【问题讨论】:
很难理解您要做什么,也许您可以向我们展示您的意见? 我将编辑以希望澄清。尝试根据 RecommendationTable_df 分数对降序的 6 进行排序 - 第一个 # 是 id,第二个是分数。所以 13 的 id 是 Rolf Rylan 的名字是 1.00 的完美匹配,因为他是 Rolf Rylan 下一个结果应该是 20 的 id,他是 Braak Presley,它在 3 组类别英雄类型、武器和法术加上所有匹配他有一个额外的东西,所以他也是 1.0。df.loc[recommendationTable_df.head(6).index, :]
真棒,应该可以工作
@PMende 谢谢,效果很好。我如何接受你的回答?结果以正确的顺序与表格匹配。
【参考方案1】:
正如 PMende 在 cmets 中指出的那样,我改变了
df.loc[df.index.isin(recommendationTable_df.head(3).keys())]
进入
df.loc[recommendationTable_df.head(6).index, :]
现在匹配了
#Multiply the genres by the weights and then take the weighted average
recommendationTable_df = ((genreTable*userProfile).sum(axis=1))/(userProfile.sum())
#Sort our recommendations in descending order
recommendationTable_df = recommendationTable_df.sort_values(ascending=False)
#df.loc[df.index.isin(recommendationTable_df.head(3).keys())] #adjust the value of 3 here
df.loc[recommendationTable_df.head(6).index, :]
所以如果我输入角色名称 Odorr Spalding,我会以 1.0 的分数和降序匹配的顺序将他找回 Odorr Spalding。
【讨论】:
以上是关于推荐表排序数据框结果按降序排列 Pandas的主要内容,如果未能解决你的问题,请参考以下文章