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

Pandas如何规范实现按col1分组并按组内col2最小值排序?

Pandas DataFrame 自定义分组排序问题

原始数据

import pandas as pd
df = pd.DataFrame({'col1': ['A', 'B', 'A', 'B', 'C'],
                   'col2': [3, 1, 2, 4, 3],
                   'col3': [10, 20, 30, 40, 50]})

期望结果

col1 col2    col3
1   B   1   20
3   B   4   40
0   A   3   10
2   A   2   30
4   C   3   50

从结果可明确排序规则:先按col1分组内的col2最小值升序排列分组,同一分组内保留原始行的相对顺序。

规范实现方法

方法1:利用sort_values的key参数(Pandas 1.1.0+支持)

无需创建临时列,直接通过key参数生成分组排序依据:

df.sort_values(
    by='col1',
    key=lambda x: x.map(df.groupby('col1')['col2'].min()),
    kind='stable'
)
  • key参数为每个col1映射其分组内col2的最小值,以此作为排序依据
  • kind='stable'确保同一分组内的行保持原始顺序,与期望结果完全匹配

方法2:分组后排序合并(逻辑更直观)

先按col1拆分分组,再按分组的col2最小值排序分组,最后合并:

# 按col1分组,保留原始分组顺序
groups = [group for _, group in df.groupby('col1', sort=False)]
# 按每个分组的col2最小值排序分组
sorted_groups = sorted(groups, key=lambda g: g['col2'].min())
# 合并分组得到结果
result = pd.concat(sorted_groups)

两种方法均为简洁规范的实现方式,避免了临时列的创建与删除操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 12:33:30