
当需要按某列分组并排序,但不执行求和、均值等聚合操作时,可借助 groupby().first() 保留每组首行,再通过 sort_values() 按目标列排序,从而实现逻辑分组+有序展示的效果。
当需要按某列分组并排序,但不执行求和、均值等聚合操作时,可借助 groupby().first() 保留每组首行,再通过 sort_values() 按目标列排序,从而实现逻辑分组+有序展示的效果。
在 Pandas 中,groupby() 默认要求后续接聚合操作(如 .sum()、.mean()、.count()),但有时我们仅需“按某列归类 → 保留每组代表性记录 → 再整体排序”,并不想丢失原始行结构或做数值汇总。此时,.first() 是一个轻量且语义清晰的选择:它对每个分组返回第一个出现的非空值行(按原始 DataFrame 行序),既避免了冗余聚合,又为后续排序提供了结构化基础。
以示例数据为例,目标是按 City 分组,提取 City 和 No. of Sport Fields 两列,并按后者升序排列。由于同一城市对应的运动场数量一致(如 LA 均为 81),使用 .first() 完全合理:
result = df[['City', 'No. of Sport Fields']] \
.groupby('City') \
.first() \
.sort_values(by='No. of Sport Fields')
print(result)
输出结果为:
No. of Sport Fields City NJ 64 SF 75 NYC 80 NYC. 80 LA 81
⚠️ 注意事项:
- 若某城市存在多个不同的
No. of Sport Fields值,.first()仅保留首个值,可能掩盖数据差异——此时应先确认业务逻辑是否允许去重,或改用.drop_duplicates(subset=['City'], keep='first')配合sort_values()更显意图; -
groupby().first()会将分组键(如'City')设为索引,若需恢复为普通列,可链式调用.reset_index(); - 排序默认升序,如需降序,请传入
ascending=False参数。
综上,groupby(...).first().sort_values(...) 是一种简洁、高效且符合直觉的“分组—取样—排序”范式,在无需统计聚合的场景中值得优先考虑。










