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

如何高效为大型Pandas DataFrame应用多参数函数计算流行度

高效计算婴儿姓名流行度的Pandas方案

核心思路

避开逐行apply的低效循环,改用Pandas原生的向量化分组操作,先计算年度总出生人数,再完成比例运算。


方法一:groupby.transform(最优性能)

这是最简洁高效的实现,无需额外合并操作,直接将分组结果广播到原数据的对应行:

# 生成与原DataFrame同长度的年度总出生数列
df['year_total'] = df.groupby('Year')['Count'].transform('sum')
# 计算百万分比流行度
df['popularity'] = (df['Count'] / df['year_total']) * 1_000_000
# 可选:清理中间列
df.drop('year_total', axis=1, inplace=True)

方法二:预计算年度总数后合并

如果需要更清晰的分步逻辑,可以先单独计算年度统计结果,再合并回原数据:

# 预计算每年的总出生人数
year_totals = df.groupby('Year')['Count'].sum().reset_index(name='year_total')
# 将年度总数合并到原DataFrame
df = df.merge(year_totals, on='Year', how='left')
# 计算流行度
df['popularity'] = (df['Count'] / df['year_total']) * 1_000_000
# 可选:清理中间列
df.drop('year_total', axis=1, inplace=True)

效率说明

  • 两种方法均采用向量化运算,彻底避开了apply的逐行循环(这是你之前耗时极长的核心原因)。
  • 处理195万行数据的时间通常在几秒到几十秒级别,远优于原方案的84小时预估。

验证示例

针对你提到的场景:

1950年Mary(女)有50000人,当年总出生200万,流行度为25000
计算逻辑:(50000 / 2000000) * 1_000_000 = 25000,与预期结果完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 22:07:16