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

求助:用Pandas按索引标签分组DataFrame,计算各州前三人口县总和并筛选前三州

解决方法:按需求处理Pandas DataFrame

没问题,我来帮你搞定这个Pandas处理需求!咱们一步步拆解,保证每一步都明明白白:

步骤1:按州分组,提取每个州人口最多的3个县

首先,我们需要把数据按州名(STNAME)分组,然后对每个州的县,筛选出人口(POPESTIMATE)最多的3个。用groupby结合nlargest就能轻松实现:

import pandas as pd

# 先模拟你的数据(实际使用时替换成你的真实DataFrame)
data = {
    'STNAME': ['Alabama', 'Alabama', 'Alabama', 'Alabama', 'Alabama',
               'Wyoming', 'Wyoming', 'Wyoming'],
    'CTYNAME': ['Autauga County', 'Baldwin County', 'Barbour County', 'Bibb County', 'Blount County',
                'Sweetwater County', 'Teton County', 'Uinta County'],
    'POPESTIMATE': [54660, 183193, 27341, 22861, 57373, 43593, 21297, 21102]
}
df = pd.DataFrame(data)

# 按州分组,取每个州人口Top3的县
top3_counties = df.groupby('STNAME').apply(lambda x: x.nlargest(3, 'POPESTIMATE')).reset_index(drop=True)

解释:groupby('STNAME')将数据按州拆分,每个州对应一个子DataFrame;lambda x: x.nlargest(3, 'POPESTIMATE')对每个子DataFrame取人口最多的3行;reset_index(drop=True)是为了去掉分组后生成的多级索引,得到整洁的结果。

步骤2:计算「各州人口统计值」

接下来,对每个州的Top3县人口求和,得到你要的「各州人口统计值」:

# 按州分组求和
state_pop_total = top3_counties.groupby('STNAME')['POPESTIMATE'].sum().rename('各州人口统计值')

这里我们再次按州分组,只对POPESTIMATE列求和,并用rename给结果列起一个直观的名字。

步骤3:找出统计值最高的3个州并转成列表

最后一步,从所有州的统计值里取最大的3个,再转成列表:

# 取Top3州并转列表
top3_states = state_pop_total.nlargest(3).index.tolist()
print(top3_states)
# 输出示例:['Alabama', 'Wyoming'](如果只有这两个州的话)

nlargest(3)会直接返回最大的3个值及其对应的州名,我们提取它的索引(也就是州名)再转成列表即可。


更简洁的链式写法

如果你喜欢更紧凑的代码,可以把所有步骤合并成链式调用,省去中间变量:

top3_states = (df.groupby('STNAME')
               .apply(lambda x: x.nlargest(3, 'POPESTIMATE')['POPESTIMATE'].sum())
               .nlargest(3)
               .index.tolist())

这个写法和分步逻辑完全一致,只是把操作连在一起,更高效省内存。

注意事项

  • 如果某个州的县数量不足3个,nlargest会自动取该州所有的县,求和逻辑依然成立,完全符合你“最多3个”的需求;
  • 确保你的POPESTIMATE列是数值类型(int/float),如果是字符串的话需要先转换:df['POPESTIMATE'] = pd.to_numeric(df['POPESTIMATE'])。

内容的提问来源于stack exchange,提问作者Aniruddh Maini

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 19:22:43