将GroupBy对象按最大最大值排序。个别群体的价值

时间:2019-02-01 13:06:45

标签: python pandas pandas-groupby

我正在尝试按特定年份的最高值对我的groupby对象进行排序-即2018年的值。但是,失败了。
代码

aggs = {'sales':'sum')
df.groupby(by=['segment', 'year'].agg(aggs)
熊猫在分组时

默认结果
(按Level0字母顺序排列,然后按Level1升序排列)

Segment Year Sales  
A 2016 2  
A 2017 10  
A 2018 6  
B 2016 1  
B 2017 4  
B 2018 8

预期结果:

Segment Year Sales  
B 2016 1  
B 2017 4  
B 2018 8  
A 2016 2  
A 2017 10  
A 2018 6

即A排在B后面,因为2018年B的总和为8,而A的总和为6。

1 个答案:

答案 0 :(得分:2)

创建的想法Categorical的类别按2018的过滤值分类,并按Sales排序:

cats = df[df['Year'] == 2018].sort_values('Sales', ascending=False)['Segment']

aggs = {'Sales':'sum'}
df['Segment'] = pd.Categorical(df['Segment'], ordered=True, categories=cats)
df1 = df.groupby(by=['Segment', 'Year']).agg(aggs)

print (df1)
              Sales
Segment Year       
B       2016      1
        2017      4
        2018      8
A       2016      2
        2017     10
        2018      6