
当需要按某列分组后直接排序,而非计算统计值时,可借助 groupby().first() 提取每组首行,再用 sort_values() 按目标列排序,从而实现逻辑分组+有序展示的效果。
当需要按某列分组后直接排序,而非计算统计值时,可借助 groupby().first() 提取每组首行,再用 sort_values() 按目标列排序,从而实现逻辑分组+有序展示的效果。
在 Pandas 中,groupby() 默认要求后续接聚合操作(如 .sum()、.mean()),但实际业务中常需“仅按某列归类,并保留代表性记录(如首条)后再排序”,而非数值汇总。此时,.first() 是最简洁、语义清晰的解决方案:它对每个分组返回第一个非空值(若该列全为 NaN 则返回 NaN),既避免了冗余聚合,又保持了数据完整性。
以示例数据为例,目标是按 City 分组,展示 City 和 No. of Sport Fields 两列,并按后者升序排列:
import pandas as pd
# 构造示例数据
df = pd.DataFrame({
'Athlete ID': [1231, 4231, 2234, 1223, 4531, 2345],
'City': ['LA', 'NYC', 'NJ', 'SF', 'LA', 'NYC.'],
'No. of Sport Fields': [81, 80, 64, 75, 81, 80]
})
# 分组取首行 + 按字段排序
result = df.groupby('City').first().sort_values(by='No. of Sport Fields')
print(result[['No. of Sport Fields']])
输出:
No. of Sport Fields City NJ 64 SF 75 NYC 80 NYC. 80 LA 81
⚠️ 注意事项:
- 若同一
City下No. of Sport Fields值不一致(如存在脏数据),.first()仅保留该组第一条记录的值,不保证逻辑一致性——此时建议先校验或清洗数据(例如用df.drop_duplicates(subset=['City'], keep='first')替代)。 -
groupby().first()自动排除索引列;若需保留原始索引信息,可改用df.sort_values('No. of Sport Fields').drop_duplicates('City', keep='first'),更直观且可控。 - 排序默认升序,如需降序,在
sort_values()中添加参数ascending=False即可。
综上,groupby().first().sort_values() 是轻量、高效、符合直觉的“分组—排序”组合方案,适用于去重分组展示场景,是 Pandas 数据整理中的实用技巧。










