
当需要按某列分组后直接排序(不进行求和、计数等聚合),可借助 groupby().first() 提取每组首行,再通过 sort_values() 按目标列排序,从而实现逻辑分组+有序展示的效果。
当需要按某列分组后直接排序(不进行求和、计数等聚合),可借助 groupby().first() 提取每组首行,再通过 sort_values() 按目标列排序,从而实现逻辑分组+有序展示的效果。
在 Pandas 中,groupby() 默认要求后续接聚合操作(如 .sum()、.mean()、.count()),但有时我们仅希望“按某列归类”,保留每组的一条代表性记录(例如首行),再整体按另一列排序——这并非传统意义上的聚合,而是一种分组后去重+排序的典型需求。
上述场景中,尽管 No. of Sport Fields 在同一 City 下值相同(如 LA 均为 81),但原始数据可能存在拼写差异(如 "NYC" 与 "NYC." 被视为不同组)或冗余重复。此时,df.groupby('City').first() 会为每个唯一 City 值选取其首次出现的整行数据(包括 Athlete ID 和 No. of Sport Fields),既保持字段完整性,又消除重复组。
完成分组提取后,链式调用 .sort_values(by='No. of Sport Fields') 即可按运动场地数量升序排列结果:
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()仅保留首条记录,可能丢失信息;此时应先明确业务逻辑(如取max()/min()/median()),再选用对应聚合函数。 - 字符串清洗建议前置:对
City列执行str.strip()或str.replace('.', '')可合并"NYC."与"NYC",提升分组合理性。 - 如需保留所有原始行但按
City分块 + 块内排序,应使用df.sort_values(['City', 'No. of Sport Fields']),而非groupby。
综上,groupby(...).first().sort_values(...) 是实现“逻辑分组→取代表样本→全局排序”这一轻量级整理流程的简洁高效方案。

















