Python:如何在列表中对元素进行排名?

时间:2018-07-11 14:07:49

标签: python pandas dataframe rank

假设我有一个UNDERDERED数据框:

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()

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

2 个答案:

答案 0 :(得分:1)

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

df[df > input].count()

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

答案 1 :(得分:0)

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

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

另一个想法是通过Truesum个值进行计数:

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