Pandas排名指定订单

时间:2016-11-24 11:40:21

标签: pandas aggregate rank

我想在熊猫中指定等级顺序。我知道你可以这样做:

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

问题1

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

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

问题2

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  

1 个答案:

答案 0 :(得分:1)

我认为你可以使用:

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)