You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按需求对Pandas DataFrame的元素进行排序与分组?

解决方案

首先纠正几个关键点:你的原代码里误用了列名(DataFrame中分组列是category而非group),且未处理同分数按时间升序、组间按组内最高分降序这两个核心需求。以下是完整实现步骤:

步骤1:转换时间列为datetime类型

时间列需要先转为可排序的datetime格式,否则字符串排序会出错:

df['time'] = pd.to_datetime(df['time'])

步骤2:生成组内最高分辅助列

通过groupby.transform为每行添加对应组的最高分,作为组间排序的依据:

df['group_max_score'] = df.groupby('category')['score'].transform('max')

步骤3:多维度排序

按「组内最高分降序 → 组内分数降序 → 时间升序」的优先级排序,最后删除辅助列:

df_sorted = df.sort_values(
    by=['group_max_score', 'score', 'time'],
    ascending=[False, False, True]
).drop('group_max_score', axis=1)

最终结果说明

排序后的数据顺序完全符合需求:

  • 组间:C组(最高分5)→ A组(最高分5)→ B组(最高分4)
  • 组内:
    • A组:peter(5分)→ tom(3分,时间更早)→ nick(3分)
    • B组:ewa(4分)→ juli(2分)
    • C组:johan(5分)

替代简化写法(无需辅助列)

如果不想生成临时列,也可以先按组内规则排序,再按组的最高分排序分组:

# 先完成组内排序:分数降序,时间升序
df_sorted_inner = df.sort_values(['score', 'time'], ascending=[False, True])
# 按category分组后,按每组的最高分降序排列各组
df_sorted = df_sorted_inner.groupby('category', sort=False).apply(
    lambda x: x
).sort_index(key=lambda x: df.groupby('category')['score'].max()[x], ascending=False).reset_index(drop=True)

内容的提问来源于stack exchange,提问作者Wenjie Yu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 10:12:12