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

Python实现按行分组计算GDP年度百分比变动

问题

我需要在一份数据集里,针对各个国家计算GDP的年度百分比变动。数据集每行对应一个国家的年度记录,结构如下:

CountryYearLifeExpGDP
Chile200077.37.79e+10
Chile200077.37.79e+10
............
Zimbabwe201459.21.59e+10
Zimbabwe201560.71.63e+10

理想情况是遍历行数据,当当前行与上一行国家相同时,计算两行的GDP百分比变动。目前我只能逐个处理每个国家,手动将结果添加到新列GDP%中。尝试把以下代码放入循环(将国家名设为变量)但未成功:

gdp_data['GDP%'] = 0
gdp_country = gdp_data[gdp_data['Country'] == 'Chile']
gdp_data['GDP%'] = gdp_country['GDP'].pct_change()

请问是否存在正确且更高效的实现方式?

解决方案

核心思路:用groupby结合pct_change()实现批量计算

Pandas的分组(groupby)操作可以高效按国家分组计算,避免循环遍历每个国家的低效操作,同时自动处理不同国家的边界(不会跨国家计算变动)。

步骤1:预处理数据(解决重复行问题)

你的数据存在同一国家同一年份的重复记录(比如智利2000年有两行完全相同的数据),这类重复行会干扰年度变动计算,需要先处理:

# 先按国家、年份排序,保证数据时序正确
gdp_data = gdp_data.sort_values(['Country', 'Year'])

# 对同一国家同一年的记录聚合,这里用均值,也可根据需求用first()/last()
gdp_data = gdp_data.groupby(['Country', 'Year']).agg(
    {'LifeExp': 'mean', 'GDP': 'mean'}
).reset_index()

步骤2:计算各国GDP年度变动

直接通过groupby按国家分组后,调用pct_change()即可得到每个国家的GDP年度百分比变动:

# 按Country分组,计算GDP的年度变动百分比,赋值给新列GDP%
gdp_data['GDP%'] = gdp_data.groupby('Country')['GDP'].pct_change()

原代码失效原因

你原代码的问题是:将gdp_country['GDP'].pct_change()赋值给整个gdp_data['GDP%']列时,非智利的行会被填充为NaN,而且循环处理每个国家不仅代码冗余,效率远低于Pandas的向量化分组操作。

补充说明

pct_change()的计算逻辑为:(当前行GDP - 上一行GDP) / 上一行GDP,完全符合年度百分比变动的需求。每个国家的第一行(最早年份)会显示NaN,因为没有上一年的数据,这是合理的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 15:57:49