熊猫groupby和排序最大值

时间:2019-03-26 02:42:15

标签: python pandas sorting group-by

我正在尝试在groupby Columnspandas两个df并返回max值。然后,我希望针对相同的max对这些Columns值进行排序。

这是我的尝试:

将熊猫作为pd导入

d = ({
'year' : ['2016','2016','2016','2016','2016','2015','2015','2015','2015','2014','2014','2014','2014'],        
    'Val' : ['A','B','D','T','S','D','T','T','U','T','T','V','C'],                 
    'Num' : [1,2,4,5,3,6,4,3,2,5,6,1,2],                                     
    })

df = pd.DataFrame(data = d)

df = df.groupby(['year','Val']).Num.max()

输出:

year  Val
2014  C      2
      T      6
      V      1
2015  D      6
      T      4
      U      2
2016  A      1
      B      2
      D      4
      S      3
      T      5

我已经尝试过产生以下内容

df = df.sort_values(['year','Num'], ascending=False)

预期输出:

year  Val
2014  T      6
      C      2
      V      1
2015  D      6
      T      4
      U      2
2016  T      5
      D      4
      S      3
      B      2
      A      1

2 个答案:

答案 0 :(得分:1)

因此,您需要groupbytransform sort_values

df.groupby('year').transform(pd.Series.sort_values,ascending=False)
Out[42]: 
year  Val
2014  C      6
      T      2
      V      1
2015  D      6
      T      4
      U      2
2016  A      5
      B      4
      D      3
      S      2
      T      1
Name: Num, dtype: int64

答案 1 :(得分:1)

使用transform对max返回的值进行排序

 data = ({
 'year' :      ['2016','2016','2016','2016','2016','2015','2015','2015','2015','2014','2014','2014','2014'],        
     'Val' : ['A','B','D','T','S','D','T','T','U','T','T','V','C'],                 
     'Num' : [1,2,4,5,3,6,4,3,2,5,6,1,2],                                     
     })

 df = pd.DataFrame(data = data)

 grouped = df.groupby(['year','Val']).max()
 print(grouped)
 print(grouped.transform(pd.Series.sort_values,ascending=False))

输出:

 Num
      year Val     
      2014 C      2
           T      6
           V      1
      2015 D      6
           T      4
           U      2
      2016 A      1
           B      2
           D      4
           S      3
           T      5
 

输出 2:

           Num
 year Val     
 2015 D      6
 2014 T      6
 2016 T      5
      D      4
 2015 T      4
 2016 S      3
      B      2
 2015 U      2
 2014 C      2
 2016 A      1
 2014 V      1