Pandas按zone、keyword分组后对sales求和并按结果降序排列的方法
实现代码
你需要先保证分组时保留原数据中zone的出现顺序,再对同一个zone下的行按sales降序做组内排序即可,完整代码如下:
# 第一步:按zone+keyword分组求和,保留zone在原数据中的出现顺序,不自动对分组键排序 df_sum = df_sales.groupby(['zone','keyword'], sort=False)['sales'].sum().reset_index() # 第二步:按zone分组,组内按sales降序排列,不改变zone之间的原有顺序 df_res = df_sum.groupby('zone', sort=False, group_keys=False).apply( lambda x: x.sort_values('sales', ascending=False) ).reset_index(drop=True)
原理解释
- 你之前直接对全表执行
sort_values会打乱zone的原有分组顺序,本质是排序维度是全表所有行,而非组内排序 groupby时添加sort=False参数,会严格按照分组字段在原数据中首次出现的顺序生成分组,不会默认按字段值升序排列,保证zone的顺序符合预期
内容的提问来源于stack exchange,提问作者Alain
相关产品推荐
相关产品推荐

