如何基于分组总和对Pandas DataFrame进行分组排序?
按指定规则重排Pandas DataFrame的实现方法
核心思路
先计算每个(year, make, model)组合的num_registered_cars总和,将该总和关联回原DataFrame的每一行,再以此总和为依据完成分组排序,确保同一年份内总量高的make+model组排在前面,且同组行自动聚合。
具体代码实现
假设你的原DataFrame名为car_df,按以下步骤操作:
- 计算分组总量
# 统计每个年份下,各品牌+车型的总注册量 group_totals = car_df.groupby(['year', 'make', 'model'])['num_registered_cars']\ .sum()\ .reset_index(name='total_registered')
- 关联总量到原数据
# 把分组总量合并回原DataFrame,让每一行都能获取到所属组的总注册量 car_df_with_total = car_df.merge(group_totals, on=['year', 'make', 'model'])
- 执行排序
# 按规则排序:年份升序,组总注册量降序,同组内可按品牌/车型进一步排序(可选) sorted_car_df = car_df_with_total.sort_values( by=['year', 'total_registered', 'make', 'model'], ascending=[True, False, True, True] ) # 可选:删除临时添加的total_registered列 sorted_car_df = sorted_car_df.drop(columns='total_registered')
效果说明
排序后的结果会满足:
- 所有行按
year从小到大排列 - 同一年份内,
make+model组按总注册量从高到低排序 - 同一
make+model的所有行(不同fuel、variant等)会自动聚合在一起
内容的提问来源于stack exchange,提问作者kithuto
相关产品推荐
相关产品推荐

