标签: rank

使用排名函数(或其他函数)PYTHON 打破平局

我有以下数据框:

ID Name    Weight Score  
1  Amazon    2    11     
1  Apple     4    10     
1  Netflix   1    10     
2  Amazon    2    8      
2  Apple     4    8      
2  Netflix   1    5     
Run Code Online (Sandbox Code Playgroud)

目前我有一个代码,如下所示

#add weight and score column
df['Rank'] = df['Weight'] + df['Score']
#create score rank on ID column
df['Score_Rank'] = df.groupby('ID')['Rank'].rank("first", ascending = False) 
Run Code Online (Sandbox Code Playgroud)

这段代码并没有给我我想要的东西。

我想在分数上排名第一,不包括权重。然后通过添加权重列来打破排名中的任何平局。如果添加权重列后还有更多平局,则排名将通过随机选择。

我认为 if 语句可以在这种情况下工作,只是不确定如何工作。

预期输出:

ID Name    Weight Score  Score_Rank
1  Amazon    2    11     1
1  Apple     4    10     2
1  Netflix   1    10     3
2  Amazon …
Run Code Online (Sandbox Code Playgroud)

python numpy rank dataframe pandas

3
推荐指数
1
解决办法
2105
查看次数

获得滚动百分位排名的快速方法

假设我们有一个像这样的 pandas df :

        A    B    C
day1  2.4  2.1  3.0
day2  4.0  3.0  2.0
day3  3.0  3.5  2.5
day4  1.0  3.1  3.0
.....
Run Code Online (Sandbox Code Playgroud)

我想要获得所有列的滚动百分位数排名,窗口中有 10 个观察值。下面的代码可以工作,但是速度很慢:

scores = pd.DataFrame().reindex_like(df).replace(np.nan, '', regex=True)
scores = df.rolling(10).apply(lambda x: stats.percentileofscore(x, x[-1]))
Run Code Online (Sandbox Code Playgroud)

我也尝试过这个,但速度更慢:

def pctrank(x):
    n = len(x)
    temp = x.argsort()
    ranks = np.empty(n)
    ranks[temp] = (np.arange(n) + 1) / n
    return ranks[-1]
scores = df.rolling(window=10,center=False).apply(pctrank)
Run Code Online (Sandbox Code Playgroud)

有更快的解决方案吗?谢谢

python numpy scipy rank pandas

3
推荐指数
1
解决办法
2441
查看次数

在Oracle中选择组的前n个元素

我有一个具有名称,值,时间列的Oracle表。基本上,该表用于记录目的,用于存储对特定名称所做的更改,先前的值是什么以及更改时间。

我需要制定一个查询来获取特定名称的前n个更改,并且输出应具有表中的所有名称。任何帮助/建议吗?

编辑:

名称值时间
Harish Pass 2011年11月1日
Ravi Fail 2-Nov-2011
Harish缺席2011年10月31日
Harish出席了2011年8月31日 
Harish目前2011年7月31日

我需要选择11月1日,10月31日,8月31日和Ravi的Harish的详细信息。

sql oracle rank top-n

2
推荐指数
1
解决办法
8585
查看次数

如何根据重复对表列进行排名?

我有一张这样的桌子我希望根据cksid和guid的组合对它进行排名.

cksid       guid
----------- -----------
1           301
1           301
1           301
2           303
2           303
3           303
4           303
4           303
4           303
Run Code Online (Sandbox Code Playgroud)

输出应该是这样的

cksid       guid           rank
----------- ----------- ----------
1           301             1
1           301             2
1           301             3
2           303             1
2           303             2
3           303             1
4           303             1
4           303             2
4           303             3
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server rank sql-server-2008

2
推荐指数
1
解决办法
311
查看次数

FindFirst,FindNext(Delphi Xe,Win7)排名不正确

我在目录中有一些文件.我尝试使用FindFirst和FindNext获取这些文件,但我无法在Windows 7上获得相同的顺序.

C:\Test
SampleFile.0.png
SampleFile.1.png
SampleFile.2.png
SampleFile.3.png
SampleFile.4.png
SampleFile.5.png
SampleFile.6.png
SampleFile.7.png
SampleFile.8.png
SampleFile.9.png
SampleFile.10.png
SampleFile.11.png
SampleFile.12.png
SampleFile.13.png
SampleFile.14.png
SampleFile.15.png
SampleFile.16.png
SampleFile.17.png
SampleFile.18.png
SampleFile.19.png
SampleFile.20.png
SampleFile.21.png
SampleFile.22.png
Run Code Online (Sandbox Code Playgroud)

当我尝试使用我的代码时,我得到了

SampleFile.0.png
SampleFile.1.png
SampleFile.10.png
SampleFile.11.png
SampleFile.12.png
SampleFile.13.png
SampleFile.14.png
SampleFile.15.png
SampleFile.16.png
SampleFile.17.png
SampleFile.18.png
SampleFile.19.png
SampleFile.2.png
SampleFile.20.png
SampleFile.21.png
.
.
.
Run Code Online (Sandbox Code Playgroud)

如何获得正确排名顺序的文件列表?

Procedure Test;
var
sr : TSearchRec;
i : integer;
ListFiles : TStringList;  
begin
ListFiles := TStringList.Create;
i := FindFirst('c:\test\*.png', faDirectory, sr);
while i = 0 do begin  
ListFiles.Add(ExtractFileName(sr.FindData.cFileName));
i := FindNext(sr); 
end;
FindClose(sr);
end; …
Run Code Online (Sandbox Code Playgroud)

delphi rank delphi-xe findfirst

2
推荐指数
1
解决办法
1113
查看次数

在MySQL中按组排名

我有一个包含一列的表格如下:

name
-------
Michael
Michael
Michael
Michael
John
John
John
Alex
Alex
Run Code Online (Sandbox Code Playgroud)

我需要对它们进行排名以给出:

name    | rank
--------|------
Michael |1
Michael |2
Michael |3
Michael |4
John    |1
John    |2
John    |3
Alex    |1
Alex    |2
Run Code Online (Sandbox Code Playgroud)

我该怎么做?

mysql rank

2
推荐指数
2
解决办法
6997
查看次数

R数据帧按组排序(按排名分组)与包dplyr

我有一个数据框'test',如下所示:

    session_id  seller_feedback_score
1   1   282470
2   1   275258
3   1   275258
4   1   275258
5   1   37831
6   1   282470
7   1   26
8   1   138351
9   1   321350
10  1   841
11  1   138351
12  1   17263
13  1   282470
14  1   396900
15  1   282470
16  1   282470
17  1   321350
18  1   321350
19  1   321350
20  1   0
21  1   1596
22  7   282505
23  7   275283
24  7   275283
25  7   275283
26  7 …
Run Code Online (Sandbox Code Playgroud)

r rank dataframe dplyr

2
推荐指数
1
解决办法
1万
查看次数

numpy矩阵排名不正确的结果

我有一个奇怪的问题使用numpy.linalg.matrix_rank().
我有一个矩阵A,它有三列和> 100行.A由0和1组成.当我用numpy.linalg.matrix_rank(A)我的时候answer=3,这是正确的.
但是,当我向A添加一个具有相同长度的新列(A现在有四个colunms)时,使用numpy.linalg.matrix_rank(A)I get answer=1,这是没有意义的.新列中的数字为数千.所有数据类型都是float32.

有谁知道问题在哪里?谢谢!

这是一个随机生成的例子.这是一个40*3阵列A.

array([[ 0., 0., 1.], [ 0., 0., 1.], [ 0., 0., 1.], [ 0., 0., 1.], [ 0., 0., 1.], [ 0., 0., 1.], [ 0., 0., 1.], [ 0., 0., 1.], [ 0., 0., 1.], [ 0., 0., 1.], [ 0., 0., 1.], [ 0., 0., 1.], [ 0., 0., 1.], [ 0., 0., 1.], [ 0., 0., 1.], [ 0., 0., …

python numpy matrix rank

2
推荐指数
1
解决办法
1339
查看次数

在列表中查找排名和百分比排名

我有一些非常大的列表,我正在使用(> 1M行),我试图找到一个快速(最快的?)方式,给定一个浮点数,浮点数与浮点数列表相比,找到它的百分比排名与列表范围相比.这是我的尝试,但它非常慢:

X =[0.595068426145485,
0.613726840488019,
1.1532608695652,
1.92952380952385,
4.44137931034496,
3.46432160804035,
2.20331487122673,
2.54736842105265,
3.57702702702689,
1.93202764976956,
1.34720184204056,
0.824997304105564,
0.765782842381996,
0.615110856990126,
0.622708022872803,
1.03211045820975,
0.997225012974318,
0.496352327702226,
0.67103858866700,
0.452224068868272,
0.441842124852685,
0.447584524952608,
0.4645525042246]

val = 1.5
arr = np.array(X) #X is actually a pandas column, hence the conversion
arr = np.insert(arr,1,val, axis=None) #insert the val into arr, to then be ranked
st  = np.sort(arr)

RANK      = float([i for i,k in enumerate(st) if k == val][0])+1 #Find position
PCNT_RANK = (1-(1-round(RANK/len(st),6)))*100 #Find percentage of value compared to range …
Run Code Online (Sandbox Code Playgroud)

python performance numpy rank pandas

2
推荐指数
1
解决办法
1597
查看次数

手动计算多列的平均排名

我正在寻找一种方法来生成基于多个列的平均值作为方法的排名,其中一个包含字符串,另一个包含整数(很容易超过2列,但为了简单起见,我限制为2列)。

import pandas as pd
df = pd.DataFrame(data={'String':['a','a','a','a','b','b','c','c','c','c'],'Integer':[1,2,3,3,1,3,6,4,4,4]})
print(df)
  String  Integer
0      a        1
1      a        2
2      a        3
3      a        3
4      b        1
5      b        3
6      c        6
7      c        4
8      c        4
9      c        4
Run Code Online (Sandbox Code Playgroud)

这个想法是为了能够创建排名,以字符串的降序排列每一行,以升序排列整数,这将是输出:

    Rank String  Integer
0      2      c        4           
1      2      c        4         
2      2      c        4          
3      4      c        6          
4      5      b        1          
5      6      b        3         
6      7      a        1            
7      8      a        2            
8    9.5      a …
Run Code Online (Sandbox Code Playgroud)

python rank pandas

2
推荐指数
1
解决办法
38
查看次数