You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas:不执行聚合操作的分组与排序实现问题

Pandas:不执行聚合操作的分组与排序实现问题

嗨,我完全懂你的需求——你只是想把同城市的行归到一块儿,同时按「运动场地数量」排序,而且不需要做任何聚合计算(比如求和、计数这类),确实用groupby加聚合函数的常规思路不太对路,给你两个简单的实现方案:

方案一:先排序,自动实现“分组”效果

其实最直接的方式是先对数据排序,因为当你按「运动场地数量」和「城市」排序后,同一个城市的行自然会挨在一起,而且整体会按照场地数量的大小排列,完全符合你的要求:

# 先处理城市名称的小瑕疵(比如把NYC.改成NYC,避免被当成不同城市)
df['City'] = df['City'].str.strip('.')

# 只选择需要的两列,然后按场地数量、城市排序(ascending=False可以改成从大到小)
result = df[['City', 'No. of Sport Fields']].sort_values(by=['No. of Sport Fields', 'City'])
print(result)

运行后你会看到,所有同城市的行都聚在一起,而且整个结果是按运动场地数量排序好的,完美满足“分组+排序”的需求,还不用写复杂的分组逻辑。

方案二:用groupby遍历分组(适合需要单独处理每组的场景)

如果你就是想明确用分组的方式实现,也完全可以——groupby不一定非要配合聚合函数,我们可以先排序,再分组遍历每个城市的数据:

# 先清洗城市名称
df['City'] = df['City'].str.strip('.')

# 先按运动场地数量排好序,确保分组后的顺序是按场地数来的
df_sorted = df.sort_values(by='No. of Sport Fields')

# 按城市分组,注意设置sort=False,这样会保持我们之前排序的组顺序
for city, group in df_sorted.groupby('City', sort=False):
    print(f"--- {city} ---")
    print(group[['City', 'No. of Sport Fields']])

这个方法会把每个城市的结果单独打印出来,还带个城市标题,如果你需要对每个城市的行做额外处理的话,这个方式会更灵活。

小提醒

你数据里的NYC.(带点)和NYC会被Pandas当成两个不同的城市,所以一定要先做个简单的清洗,不然分组结果会出错哦。

备注:内容来源于stack exchange,提问作者Manish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 19:33:01