我正在尝试按特定年份的最高值对我的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。
答案 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