Pandas rank 指定顺序

Pandas rank specify order

我想在 pandas 中指定排名顺序。我知道你可以做到:

df.groupby([x, y]).rank(ascending=False)

问题 1

如何在 agg 方法中指定排名顺序(升序=False):

df.groupby([x, y]).agg({
        ('r', 'c'): 'rank'
    })

问题二

df.groupby([x, y])['r', 'c'].rank(ascending=False)

抛出错误:KeyError: Columns not found

如何为排名指定多级列?

数据结构如下:

                                            r 
                                            c 
z         x                           y                             
1         2016-11-01 00:00:00+00:00   3121  143       
                                      3923  11      
                                      3953  4    
                                      4880  12  

我认为你可以使用:

x = 'x'
y = 'y'
b = df[('r','c')].groupby(level=[x, y]).rank(ascending=False)
print (b)
z  x                          y   
1  2016-11-01 00:00:00+00:00  3121    1.0
                              3923    1.0
                              3953    1.0
                              4880    1.0
Name: (r, c), dtype: float64

或者需要tuple - 在最后加上,:

x = 'x'
y = 'y'
b = df.groupby(level=[x, y])[('r','c'), ].rank(ascending=False)
print (b)
                                    r
                                    c
z x                         y        
1 2016-11-01 00:00:00+00:00 3121  1.0
                            3923  1.0
                            3953  1.0
                            4880  1.0
#print (df)