我有一个数据框:
将 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)
我需要的是这样的结果:
M1
我有一个包含列和M2
的数据库M3
。这些M值对应于通过每种方法获得的值。我现在的想法是为他们每个人制作一个排名列。对于M1
和M2
,排名将从最高值到最低值,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) 我有以下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) 我在一个简单的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和一些先行/后置机制在模板中执行此操作会更好,还是尝试将此字段用于查询本身?
我有我的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)
如何才能使查询得出正确的排名?
在Fortran模块中,我有一个函数,它接受一个数组及其名称,从数据库(实际调用C函数)获取数组的形状,将数组复制到临时缓冲区并将缓冲区传递给另一个处理的C函数它.此Fortran函数的整数数据名称为fs_WriteData_i,实数为fs_WriteData_f,双精度为fs_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,...子例程,以使模块更易于维护?
提前谢谢了.
我正在寻找每个部门的前三名薪水。我可以使用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) 我想选择记录并确定每个类似数据的排名.
我的数据如下.
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)
请帮忙.谢谢!:)
让我用一个简单的例子来阐述我的问题.我有一个= [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)
这给出了我想要的结果,但我认为应该有更有效或更简单的方法来进行成对比较并提取非对角线元素.你对此有什么想法吗?提前致谢.
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)