标签: rank

pandas groupby 并在每组以 1 开头的组内排名

我有一个数据框:

将 pandas 导入为 pd

df = pd.DataFrame([[1, 'a'],
                    [1, 'a'],
                    [1, 'b'],
                    [1, 'a'],
                    [2, 'a'],
                    [2, 'b'],
                    [2, 'a'],
                    [2, 'b'],
                    [3, 'b'],
                    [3, 'a'],
                    [3, 'b'],

                   ], columns=['session', 'issue'])
df
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我想对会议中的问题进行排名。我尝试过:

df.groupby(['session', 'issue']).size().rank(ascending=False, method='dense')

session  issue
1        a        1.0
         b        3.0
2        a        2.0
         b        2.0
3        a        3.0
         b        2.0
dtype: float64
Run Code Online (Sandbox Code Playgroud)

我需要的是这样的结果:

  1. 对于组会话 = 1,有 3 个 a 问题和 1 个 b 问题,因此对于组 1,排名为 a = 1 和 b = 2
  2. 对于组会话=2,两个等级相等,因此它们的等级应该相同= 1
  3. 对于小组会议=3,有 b …

python size group-by rank pandas

5
推荐指数
1
解决办法
3906
查看次数

如何在R中制作排名列

M1我有一个包含列和M2的数据库M3。这些M值对应于通过每种方法获得的值。我现在的想法是为他们每个人制作一个排名列。对于M1M2,排名将从最高值到最低值,M3反之亦然。我做了一个输出表给你看。

df1<-structure(list(M1 = c(400,300, 200, 50), M2 = c(500,200, 10, 100), M3 = c(420,330, 230, 51)), class = "data.frame", row.names = c(NA,-4L))

> df1
   M1  M2  M3
1 400 500 420
2 300 200 330
3 200 10 230
4  50 100  51
Run Code Online (Sandbox Code Playgroud)

输出

> df1
   M1  rank M2  rank M3 rank
1 400   1   500  1   420  4    
2 300   2   200  2   330  3
3 200   3 …
Run Code Online (Sandbox Code Playgroud)

r data-manipulation rank dataframe

5
推荐指数
1
解决办法
1135
查看次数

mysql:按ID分组,每个ID获得最高优先级

我有以下mysql表名为"pics",包含以下字段和示例数据:

id   vehicle_id    filename    priority
1    45            a.jpg       4
2    45            b.jpg       1
3    56            f.jpg       4
4    67            cc.jpg      4
5    45            kt.jpg      3
6    67            gg.jpg      1
Run Code Online (Sandbox Code Playgroud)

在单个查询中,是否可以为每个vehicle_id获取一行,并且该行是最高优先级?

我正在寻找的结果:

array (
  [0] => array( [id] => '2', [vehicle_id] => '45', [filename] => 'b.jpg',  [priority] => '1' ),
  [1] => array( [id] => '3', [vehicle_id] => '56', [filename] => 'f.jpg',  [priority] => '4' ),
  [2] => array( [id] => '6', [vehicle_id] => '67', [filename] => 'gg.jpg', [priority] => '1' …
Run Code Online (Sandbox Code Playgroud)

mysql ranking analytic-functions rank

4
推荐指数
3
解决办法
3014
查看次数

django模板中查询集的简单排名

我在一个简单的django应用程序中有一个模型,记录了参加比赛的人的分数.我有两个模型对象,Entry和Person.每个条目都有一个人,一个人有多个条目.

我想生成一个页面,显示每个用户,他们的总分和他们的排名.

我到目前为止的命令如下:

Entry.objects.values('person__name').annotate(total=Sum('score')).order_by('-total')
Run Code Online (Sandbox Code Playgroud)

我可以使用for块很好地将结果输出到页面上.我唯一没有得到的是排名.

向每条记录添加记录的数字排名的最佳方法是什么,包括当两个分数相同时,排名反映这一点(即"4 =")?尝试使用forblock.counter和一些先行/后置机制在模板中执行此操作会更好,还是尝试将此字段用于查询本身?

django django-queryset rank

4
推荐指数
1
解决办法
2093
查看次数

MySQL - 按count()和GROUP BY排名

我有我的mysql表posts,我的论坛的所有帖子都存储在那里.就像这样:

id      uid      thread      post      title      text      time
(int)   (int)    (varchar)   (int)     (varchar)  (text)    (int)
Run Code Online (Sandbox Code Playgroud)

现在我想显示用户配置文件的排名(帖子数量排名).我尝试过这样的事情:

set @rownum := 0;
SELECT @rownum := @rownum + 1 AS rank, uid, count(id)
FROM `posts` GROUP BY uid ORDER BY count(id)
Run Code Online (Sandbox Code Playgroud)

但它返回的不是正确的数据.uid和count(id)匹配,但排名是错误的.我的条目是:

rank     uid     count(id)
  1        1        214
Run Code Online (Sandbox Code Playgroud)

我是用户1,我有214个帖子,但这不是排名1.还有其他条目,如:

rank     uid     count(id)
  8       22        674
Run Code Online (Sandbox Code Playgroud)

如何才能使查询得出正确的排名?

mysql group-by count rank

4
推荐指数
1
解决办法
6106
查看次数

重载的fortran接口具有不同的排名

在Fortran模块中,我有一个函数,它接受一个数组及其名称,从数据库(实际调用C函数)获取数组的形状,将数组复制到临时缓冲区并将缓冲区传递给另一个处理的C函数它.此Fortran函数的整数数据名称为fs_WriteData_i,实数为fs_WriteData_f,双精度为f​​s_WriteData_d.所有这些功能不仅接受一维阵列,还接受2D,3D和4D阵列,并且它们完美地工作.以下是其中一个子程序的接口:

subroutine fs_WriteData_d(fieldname, data)
    use, intrinsic :: iso_c_binding
    implicit none

    real(c_double), dimension(*) :: data
    character                    :: fieldname*(*)

    ! ...

end subroutine fs_WriteData_d
Run Code Online (Sandbox Code Playgroud)

如果用户fs_WriteData_d('name', data)使用双精度数据调用,最多为4维数组,则此子例程执行该作业.

现在,问题是:我想提供一个名为fs_WriteData的通用重载接口,所以我使用了

interface fs_WriteData
    module procedure fs_WriteData_i, &
                     fs_WriteData_f, &
                     fs_WriteData_d
end interface fs_WriteData
Run Code Online (Sandbox Code Playgroud)

不幸的是,这不起作用:编译器声明如果用户只是调用它就找不到正确的实现fs_WriteData('name', data),这是因为与所有这些函数的排名不匹配.

是否有一种聪明的方法可以避免使用相同的内容编写所有fs_WriteData_d_1d,fs_WriteData_d_2d,...子例程,以使模块更易于维护?

提前谢谢了.

fortran overloading rank

4
推荐指数
1
解决办法
1175
查看次数

Oracle SQL-如何使用RANK()或DENSE_RANK()或ROW_NUMBER()分析函数获取不同的行?

我正在寻找每个部门的前三名薪水。我可以使用RANK()DENSE_RANK()或来完成此操作,ROW_NUMBER()但是我的表中有一些薪水相同的记录。

下面提到的是我的查询及其结果。

第20部门的前3名薪水应该是6000、3000、2975。但是有2名员工的薪水为3000,并且他们的薪水均为2。因此,我给了该部门4条记录(1为1级,2为1级)等级2和等级3的1条记录)。

请就如何获得每个部门的前三名薪水提出建议/建议。

查询:

SELECT * FROM (
SELECT EMPNO, DEPTNO, SAL, 
DENSE_RANK() over (partition by deptno order by sal DESC) as RANK,
row_number() over (partition by deptno order by sal DESC) as ROWNO
from EMP)
WHERE RANK <= 3;
Run Code Online (Sandbox Code Playgroud)

结果:

Empno Deptno    Salary Rank   Rowno
---------------------------------------- 
7839    10      5000    1      1
7782    10      2450    2      2
7934    10      1300    3      3
7935    20      6000    1      1
7788    20      3000    2      2
7902 …
Run Code Online (Sandbox Code Playgroud)

sql oracle distinct rank

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

如何添加排名列?

我想选择记录并确定每个类似数据的排名.

我的数据如下.

MEMBER ID | LOAN AMOUNT 
1         | 2,000.00 
2         | 1,000.00 
3         | 4,000.00
4         | 1,000.00 
Run Code Online (Sandbox Code Playgroud)

我想要的结果如下所示.

RANK|MEMBER ID|LOAN AMOUNT 
1   |3        |4,000.00
2   |1        |2,000.00
3   |2        |1,000.00
3   |4        |1,000.00 
Run Code Online (Sandbox Code Playgroud)

RANK是一个新专栏.我正在使用MS SQL Server 2008并创建了一个视图表,如下所示,但它并没有产生想要的结果.

  select rank=count(*), s1.MemberID, s1.Loan_Amount 
   from (select MemberID, Loan_Amount from vwPrintTop20Borrowers) s1
   group by s1.MemberID, s1.LOAN_AMOUNT
     order by rank, s1.Loan_amount DESC
Run Code Online (Sandbox Code Playgroud)

请帮忙.谢谢!:)

sql sql-server rank

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

Python对数组或列表中元素的成对比较

让我用一个简单的例子来阐述我的问题.我有一个= [a1,a2,a3,a4],所有ai都是一个数值.

我想得到的是'a'中的成对比较,例如I(a1> = a2),I(a1> = a3),I(a1> = a4),,,,, I(a4> = a1) ,I(a4> = a2),I(a4> = a3),其中I是指标函数.所以我使用了以下代码.

res=[x>=y for x in a for y in a]
Run Code Online (Sandbox Code Playgroud)

但它也给出了比较结果,如I(a1> = a1),..,I(a4> = a4),它总是一个.为了摆脱这些麻烦,我将res转换为numpy数组并找到off对角元素.

res1=numpy.array(res)
Run Code Online (Sandbox Code Playgroud)

这给出了我想要的结果,但我认为应该有更有效或更简单的方法来进行成对比较并提取非对角线元素.你对此有什么想法吗?提前致谢.

python arrays comparison numpy rank

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

使用DENSE_RANK排除空值

Dense_Rank正在考虑所有因素.有没有办法排除空值,所以1之后的下一个排名将是2而不是3.

这就是现在的表格:

 A     | DENSE_R 
 --------------
 1     | 1  
 --------------
 2     | null  
 --------------
 3     | 3 
 --------------
 4     |  4    
Run Code Online (Sandbox Code Playgroud)

这就是我希望表格看起来像:

 A     | DENSE_R 
 --------------
 1     | 1  
 --------------
 2     | null  
 --------------
 3     | 2 
 --------------
 4     |  3  
Run Code Online (Sandbox Code Playgroud)

我正在使用以下代码: -

WITH CTE AS
(
 SELECT A 
 FROM A1
)
SELECT A,
CASE 
  WHEN  **Condition**
  THEN DENSE_RANK() OVER (Order by [A] ASC)
END
AS 'DENSE_R'
FROM CTE
Run Code Online (Sandbox Code Playgroud)

sql sql-server rank dense-rank

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