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

如何按行列遍历DataFrame并计算年度增长率?

计算DataFrame年度增长率问题

需要为如下结构的DataFrame计算年度增长率,按行按列遍历的环节卡住了。

原始DataFrame

City        2001   2002   2003
New York    20.0   24.1   28.7
Los Angeles 11.1   12.1   13.1

期望结果

City        2001   2002   2003
New York    nan    0.20   0.19
Los Angeles nan    0.10   0.09

注:期望结果中Los Angeles的2003年增长率应为(13.1-12.1)/12.1≈0.09,原示例的0.8应为笔误

尝试的Python代码

for row in range(len(import_table)):
  for i in column_list:
    if i == "_2000":
         pass
    else:
        calculated_growth =  import_table.iloc[i].sub(import_table.iloc[i-1])
      ## update new DF ##
  column_calc_position = column_calc_position + 1

解决方案

推荐方法:用Pandas内置函数pct_change()

Pandas提供了专门计算增长率的方法,无需手动遍历,效率更高:

import pandas as pd

# 构造原始数据
data = {
    'City': ['New York', 'Los Angeles'],
    '2001': [20.0, 11.1],
    '2002': [24.1, 12.1],
    '2003': [28.7, 13.1]
}
import_table = pd.DataFrame(data)

# 计算增长率
# 1. 将City设为索引,只对年份列计算
# 2. pct_change(axis=1)按行计算后一列相对前一列的增长率
# 3. 重置索引恢复City列
growth_df = import_table.set_index('City').pct_change(axis=1).reset_index()

# 保留两位小数对齐期望结果
growth_df = growth_df.round(2)

print(growth_df)

执行后输出:

City  2001  2002  2003
0     New York   NaN  0.20  0.19
1  Los Angeles   NaN  0.10  0.09

手动遍历的修正版本

如果想理解循环逻辑,修正后的代码如下(注意Pandas优先用向量运算而非逐行循环):

import pandas as pd

data = {
    'City': ['New York', 'Los Angeles'],
    '2001': [20.0, 11.1],
    '2002': [24.1, 12.1],
    '2003': [28.7, 13.1]
}
import_table = pd.DataFrame(data)

# 初始化结果表,保留City列
growth_df = import_table[['City']].copy()
# 提取所有年份列
year_cols = [col for col in import_table.columns if col != 'City']

# 遍历年份列,从第2列开始(索引1)
for idx in range(1, len(year_cols)):
    prev_col = year_cols[idx-1]
    curr_col = year_cols[idx]
    # 整列计算增长率:(当年值-上年值)/上年值
    growth_df[curr_col] = (import_table[curr_col] - import_table[prev_col]) / import_table[prev_col]

# 第一列设为NaN
growth_df[year_cols[0]] = float('nan')
# 调整列顺序和原始表一致
growth_df = growth_df[['City'] + year_cols]
# 保留两位小数
growth_df = growth_df.round(2)

print(growth_df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 08:57:14