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

如何用Python对两列groupby?求更优失业率计算及年龄中位数方法

优化方案:一次性计算城市失业率与年龄中位数

嘿,你的需求其实用Pandas的groupby+聚合函数就能一步到位,比你现在拆分多步的写法简洁高效太多啦!先给你梳理下优化思路:

1. 更优雅的失业率计算

你原来的写法需要分别统计总人数、失业人数再合并计算,其实可以直接在分组后,对每个城市的Job列计算失业占比:

方法一:用apply快速计算

# 计算失业率(百分比)
unemployment_rate = df.groupby('City')['Job'].apply(
    lambda group: (group == 'Unemployed').mean() * 100
).reset_index(name='UnemploymentRate')

方法二:自定义聚合函数(更易读)

如果觉得lambda不够直观,也可以写个小函数:

def get_unemployment_rate(job_series):
    total_people = len(job_series)
    unemployed_count = (job_series == 'Unemployed').sum()
    return (unemployed_count / total_people) * 100

unemployment_rate = df.groupby('City')['Job'].agg(
    get_unemployment_rate
).reset_index(name='UnemploymentRate')

这两种写法都能直接得到每个城市的失业率,不需要额外的合并、重置索引操作,代码量少了一大半!

2. 计算每个城市的年龄中位数

这个更简单,直接用Pandas内置的median()聚合函数即可:

age_median = df.groupby('City')['Age'].median().reset_index(name='AgeMedian')

3. 一次性获取两个统计指标(推荐)

如果你想把失业率和年龄中位数放在同一个DataFrame里,用groupby.agg()可以一次性完成多个聚合操作,这是最优雅的写法:

# 一次性计算两个指标
city_stats = df.groupby('City').agg(
    UnemploymentRate=('Job', lambda x: (x == 'Unemployed').mean() * 100),
    AgeMedian=('Age', 'median')
).reset_index()

运行后得到的city_stats结果如下:

City  UnemploymentRate  AgeMedian
0    x          66.666667         27
1    y          33.333333         28

为什么这个方案更好?

  • 代码简洁:从原来的10+行代码压缩到3行,逻辑更清晰
  • 效率更高:减少了中间DataFrame的创建与合并,避免不必要的数据拷贝
  • 可扩展性强:如果之后需要加其他统计指标(比如平均年龄、就业人数),直接在agg()里加新的键值对就行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:52:21