我需要能够基于单个列对数组进行排名,然后再次使用第二列作为基本关系,然后将这两个等级保存到数据库中
阵列:
array = np.array(
[(70,3,100),
(72,3,101),
(70,2,102)], dtype=[
('score','int8'),
('tiebreaker','int8'),
('row_id','int8')])
array['score'] = array([70, 72, 70], dtype=int8)
仅使用'得分'列将返回
(1,3,1)
然后使用'得分'进行第二次排名排名。和'决胜局'列
(2,3,1)
然后我想将这两个等级保存到数据库中,例如:
result1 = Result.objects.get(id=array[0]['row_id'])
result1.relative_rank = 1
result1.absolute_rank = 2
results.save()
答案 0 :(得分:0)
您可以使用scipy.stats.rankdata
,如下所示:
In [10]: a
Out[10]:
array([(70, 3, 100), (72, 3, 101), (70, 2, 102)],
dtype=[('score', 'i1'), ('tiebreaker', 'i1'), ('row_id', 'i1')])
In [11]: from scipy.stats import rankdata
第一级:
In [12]: rankdata(a['score'], method='min').astype(int)
Out[12]: array([1, 3, 1])
第二级:
In [13]: rankdata(256*a['score'] + a['tiebreaker'], method='min').astype(int)
Out[13]: array([2, 3, 1])
第二级(256*a['score'] + a['tiebreaker']
)中使用的值依赖于类型为int8
的数据。
检查docstring以查看不同的method
是否更适合第二级。如果你知道第二级别没有关系,那么方法并不重要。