
当需要按某列(如 City)对 DataFrame 分组并按另一列(如 No. of Sport Fields)排序,但又不执行求和、均值等聚合操作时,可借助 groupby().first() 提取每组首行,再用 sort_values() 实现有序展示。
当需要按某列(如 city)对 dataframe 分组并按另一列(如 no. of sport fields)排序,但又不执行求和、均值等聚合操作时,可借助 `groupby().first()` 提取每组首行,再用 `sort_values()` 实现有序展示。
在 Pandas 中,groupby() 默认要求后续接聚合操作(如 .sum()、.mean()),但有时我们仅希望“逻辑分组 + 去重 + 排序”——例如:每个城市只保留一条记录(任意一条即可),并按运动场馆数量升序排列。此时,groupby().first() 是轻量且语义清晰的选择:它对每组保留第一个出现的行(保持原始顺序稳定性),不改变原始字段值,也无需自定义聚合逻辑。
假设原始数据如下:
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
⚠️ 注意事项:
- 若同一城市对应多个不同的
No. of Sport Fields值,first()仅保留首个值,可能掩盖数据不一致性——建议先用df.groupby('City')['No. of Sport Fields'].nunique().max()检查是否真为“一城一值”; - 如需保留所有行但按 City 分组后内部排序,应使用
df.sort_values(['City', 'No. of Sport Fields']),而非groupby; -
groupby().first()自动排除用于分组的列(如'City')在结果索引中,其余列取每组首行值,行为稳定且高效。
综上,groupby(...).first().sort_values(...) 是实现“分组去重 + 跨组排序”的简洁范式,在数据清洗与报表预处理中兼具可读性与实用性。

















