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

如何用Lambda函数批量创建Pandas中的增长率列?

批量生成Pandas DataFrame增长率列的方法

首先修正你的示例数据,把consumption列加入DataFrame,确保后续代码能正常运行:

import pandas as pd

consumption = [5, 10, 15, 20, 25, 30, 35, 40]
wage = [10, 20, 30, 40, 50, 60, 70, 80]
period = [1, 2, 3, 4, 5, 6, 7, 8]
id = [1, 1, 1, 1, 1, 1, 1, 1]

# 修正zip包含所有列
tup = list(zip(id, period, wage, consumption))
df = pd.DataFrame(tup, columns=['id', 'period', 'wage', 'consumption'])

方法一:for循环遍历目标列(直观易理解)

先提前完成排序和分组操作,避免重复执行浪费资源,再遍历需要计算增长率的列:

# 先排序并分组,只执行一次
sorted_grouped = df.sort_values(by=['id', 'period']).groupby(['id'])

# 定义需要计算增长率的列(排除id、period这类非数值列)
target_cols = ['wage', 'consumption']

# 遍历列批量生成增长率列
for col in target_cols:
    df[f'{col}_chg'] = sorted_grouped[col].apply(lambda x: (x / x.shift(4) - 1)).fillna(0)

方法二:批量生成后合并(更高效,适合大量列)

如果你的DataFrame有上百列,用pd.concat一次性生成所有增长率列,效率更高:

# 排序分组后,对目标列批量计算增长率
sorted_grouped = df.sort_values(by=['id', 'period']).groupby(['id'])
target_cols = ['wage', 'consumption']

# 批量生成增长率DataFrame,列名自动加上_chg
chg_df = sorted_grouped[target_cols].apply(lambda x: (x / x.shift(4) - 1)).fillna(0).add_suffix('_chg')

# 合并回原DataFrame
df = pd.concat([df, chg_df], axis=1)

实用技巧

  • 自动筛选目标列:如果需要处理所有数值列,可自动获取并排除不需要计算的列,比如:
    target_cols = [col for col in df.select_dtypes(include=['number']).columns if col not in ['id', 'period']]
    
  • 调整偏移量:shift(4)对应跨4期的增长率,若需环比(上一期),改成shift(1)即可,可根据业务需求灵活调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 08:24:20