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

基于Pandas按州取人口前三县,求总人口前三州的实现问题

解决方案:找出前三大州(基于各州人口最多的三个县总和)

我来帮你搞定这个需求!下面是分步的思路和可直接运行的代码,结合你的示例数据验证过结果:

步骤拆解

  1. 按州分组,提取每个州人口Top3的县:用groupby()按州分组,再用nlargest(3)快速获取每组内人口最多的3个值
  2. 计算每个州Top3县的总人口:对每个州的Top3人口求和
  3. 排序并提取前三的州:按总人口降序排序,取前3个州名转为字符串列表

代码实现

首先导入pandas并创建你的示例数据:

import pandas as pd

# 示例数据
df = pd.DataFrame({
    'State': ['A', 'A','A','A','A','B','B','B','B','B','B','C','C','C','C','C', 'D','D', 'D', 'D'],
    'County': ['Aa', 'Ab','Ac','Ad', 'Ae', 'Ba','Ba','Bb','Bc','Bd','Be','Ca','Cb','Cc','Cd','Ce','Da','Db','Dc','Dd'],
    'Population': [25,35,45,60,12,80,45,60,20,30,14,65,87,65,13,29,45,60,75,80]
})

接下来执行核心逻辑:

# 1. 按州分组,取每个州人口最多的3个县的人口,然后求和
state_top3_total = df.groupby('State')['Population'].nlargest(3).sum(level='State')

# 2. 按总人口降序排序,取前3个州,转为字符串列表
top3_states = state_top3_total.sort_values(ascending=False).head(3).index.tolist()

print(top3_states)
# 输出结果:['C', 'D', 'B']

代码解释

  • df.groupby('State')['Population'].nlargest(3):按州分组后,每个组只保留人口最多的3个数值,返回的是带两级索引(State和原行索引)的Series
  • .sum(level='State'):按State这个一级索引求和,得到每个州Top3县的总人口
  • sort_values(ascending=False).head(3):按总人口从高到低排序,取前3个
  • .index.tolist():提取州名并转为字符串列表

结果验证

结合你的示例数据:

  • 州C的Top3县人口:87、65、65 → 总和217
  • 州D的Top3县人口:80、75、60 → 总和215
  • 州B的Top3县人口:80、60、45 → 总和185
    所以最终排名前三的州就是['C', 'D', 'B'],和代码输出一致。

内容的提问来源于stack exchange,提问作者Brijesh Prajapati

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 10:17:29