Python 如何在具有多个条件的熊猫中对行进行排序?

Python 如何在具有多个条件的熊猫中对行进行排序?,python,pandas,Python,Pandas,我想为下面的数据框创建一个列 这里,S、L、C列是索引列,IM、CL和CTR列是值列 下图是最后一个数据帧,让我们看一看第1到第3行,它们都属于相同的索引m,h,p这里排名将首先基于最高的CTR,因为第1行和第3行的CTR相同,那么排名将基于最高的IM,因此第3行将是排名1,第1行将是排名2,第2行将是排名3 同样地,所有索引都将被排序 我如何在熊猫中实现这一点 我尝试了按排名分组的方法,但在那里我只能使用一个值列进行排名,并且多行具有相同的排名。我不希望任何两行具有相同的排名,它应该是唯一

我想为下面的数据框创建一个列

这里,S、L、C列是索引列,IM、CL和CTR列是值列

下图是最后一个数据帧,让我们看一看第1到第3行,它们都属于相同的索引m,h,p这里排名将首先基于最高的CTR,因为第1行和第3行的CTR相同,那么排名将基于最高的IM,因此第3行将是排名1,第1行将是排名2,第2行将是排名3

同样地,所有索引都将被排序

我如何在熊猫中实现这一点


我尝试了按排名分组的方法,但在那里我只能使用一个值列进行排名,并且多行具有相同的排名。我不希望任何两行具有相同的排名,它应该是唯一的。

使用
GROUPBY

df = df.sort_values(['S','L','C','CTR','IM'], ascending=[True,True,True,False,False])
df['Rank'] = df.groupby(['S','L','C']).cumcount() + 1
或:


不知道你说了什么,但我想你想复制数据?在这张纸上,我粘贴了数据
df = df.convert_dtypes()
def rank_count(x):
    x = x.sort_values(['CTR','IM'], ascending=False).reset_index(drop=True)
    x['Rank'] = x.index + 1
    return x
result = df.groupby(['S','L','C'], sort=False).apply(rank_count).reset_index(drop=True)