基于Pandas按州取人口前三县,求总人口前三州的实现问题
解决方案:找出前三大州(基于各州人口最多的三个县总和)
我来帮你搞定这个需求!下面是分步的思路和可直接运行的代码,结合你的示例数据验证过结果:
步骤拆解
- 按州分组,提取每个州人口Top3的县:用
groupby()按州分组,再用nlargest(3)快速获取每组内人口最多的3个值 - 计算每个州Top3县的总人口:对每个州的Top3人口求和
- 排序并提取前三的州:按总人口降序排序,取前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
相关产品推荐
相关产品推荐

