查找列相对于其他行的排名

问题描述 投票:0回答:2
df = pd.DataFrame({'Alice': [4,15,2], 'Bob': [9,3,5], 'Emma': [4,7,19]})

我可以通过

找到每轮得分最高的人
df.idxmax(1)
> 0      Bob
  1    Alice
  2     Emma
 dtype: object

但我想找到 Bob 在每一轮中完成的位置。输出应该是:

> 0
  2
  1

似乎带有

argsort
的东西应该可以工作,但不太明白。

这里是同样的问题,但是在 SQL Server 中。)

pandas
2个回答
2
投票

您可以使用

rank

df.rank(axis=1, method='first', ascending=False)

注意。检查方法以找到更适合您需要的方法:

如何对具有相同值的记录组进行排名(即平局):

平均:该组的平均排名
min:组中最低排名
max:组中最高排名
第一:按照它们在数组中出现的顺序分配排名
密集:类似于“min”,但组之间的等级总是增加 1。

输出:

   Alice  Bob  Emma
0    2.0  1.0   3.0
1    1.0  3.0   2.0
2    3.0  2.0   1.0

注意。请注意,排名从 1 开始,您可以添加

sub(1)
以获得从 0 开始的排名

df.rank(axis=1, method='first', ascending=False).sub(1).convert_dtypes()

输出:

   Alice  Bob  Emma
0      1    0     2
1      0    2     1
2      2    1     0

0
投票
duckdb:


(
df1.assign(col1=df1.agg(list,1)).sql
 .select("*,col1.list_sort('desc').list_position(Bob)-1 col2")
)
© www.soinside.com 2019 - 2024. All rights reserved.