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 中。)
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
duckdb:
(
df1.assign(col1=df1.agg(list,1)).sql
.select("*,col1.list_sort('desc').list_position(Bob)-1 col2")
)