【问题标题】:Python : how to rank an element among a list?Python:如何在列表中对元素进行排名?
【发布时间】:2018-07-11 14:07:49
【问题描述】:

假设我有一个 UNORDERED 数据框:

df = pandas.DataFrame({'A': [6, 2, 3, 5]})

我有一个输入:

input = 3

我想在列表中找到我的输入的排名。这里:

expected_rank_in_df(input) = 2
# Because 2 < 3 < 5 < 6

假设:输入始终包含在数据框中。所以例如,我不会在这个df中找到“4”的位置。

第一个想法是在这里使用:Pandas rank by column value:

df.rank()

但这对我来说似乎有点矫枉过正,因为我不需要对整个专栏进行排名。也许不是?

【问题讨论】:

  • 我认为初始化df时需要在括号内插入{}。 pandas.DataFrame({'A': [1, 3, 5]})

标签: python pandas dataframe rank


【解决方案1】:

如果您确定输入在列中,则排名将等于

df[df > input].count()

这有意义吗?如果您打算多次调用它,那么对列进行排序可能是值得的。但是,如果您只关心几个输入,这可能会更快。

【讨论】:

    【解决方案2】:

    您可以通过numpy.where 获得匹配值的第一个位置,第一个True 使用布尔掩码:

    a = 3
    
    print (np.where(np.sort(df['A']) == a)[0][0] + 1)
    2
    

    如果默认 RangeIndex:

    a = 3
    
    print (df['A'].sort_values().eq(3).idxmax())
    2
    

    另一个想法是按sum 计算True 值:

    print (df['A'].gt(3).sum())
    2
    

    【讨论】:

    • 对不起,我的问题不清楚:我想要的是排名,而不是职位。我编辑了我的问题
    • 但也许我可以在有序数据框上使用您的想法?
    • 我有一个替代的想法,看看我的答案一会儿
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多