推荐表排序数据框结果按降序排列 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的主要内容,如果未能解决你的问题,请参考以下文章

Ruby - 按值按降序排序哈希值

C# WinForms ComboBox:AutoComplete 不按降序排序

SQL查询结果加入排序值的问题

Codeigniter 分页链接按降序/倒序排列?

Vertica - 按降序排列的投影

Firebase 按降序对数据进行排序。 (只排序了一半。)