Pandas groupby then rating:传递参数字典时指定顺序的正确语法

问题描述 投票:0回答:1

我想指定 pandas 中的排名顺序。我知道你可以做到,当你这样做时:

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

问题1

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

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  
python pandas aggregate rank
1个回答
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)
© www.soinside.com 2019 - 2024. All rights reserved.