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
相关产品推荐
相关产品推荐

