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

Python Pandas如何逐行基于上一行值与当前行增长率计算销售额?

解决Pandas按递推规则生成sales列的问题

问题背景

你的DataFrame包含month_year和growth列,需要生成sales列:

  • 首行sales固定为1294
  • 后续每行sales = 上一行sales × (1 + 当前行growth)

之前用df['sales'].shift().cumsum()*(1+df['growth'])的写法错误,因为cumsum()是累加逻辑,完全不匹配递推乘积的需求,所以只有第二行能得到正确结果。

正确实现方式

方式一:用cumprod()高效计算(推荐)

这是最简洁高效的写法,利用Pandas的累积乘积特性完美匹配需求:

import pandas as pd

# 示例数据(替换为你的实际数据)
df = pd.DataFrame({
    'month_year': ['2023-01', '2023-02', '2023-03', '2023-04'],
    'growth': [-0.0077, 0.021, -0.015, 0.032]
})

initial_sales = 1294
# 核心代码:计算增长系数的累积乘积,首行补1后乘以初始值
df['sales'] = initial_sales * (1 + df['growth']).cumprod().shift(fill_value=1)

逻辑说明:

  • (1 + df['growth'])将增长率转换为增长系数
  • cumprod()对系数做累积乘积,比如第三行的结果就是(1+growth1)*(1+growth2)
  • shift(fill_value=1)把累积乘积序列下移一行,首行用1填充,这样乘以初始值1294后,首行即为1294,后续行刚好是上一行结果乘当前系数

方式二:逐行循环计算(适合理解逻辑)

如果想直观看到每一步的计算过程,可以用循环(数据量大时效率低于第一种方法):

initial_sales = 1294
# 先给sales列赋初始值
df['sales'] = initial_sales

# 从第二行开始递推计算
for i in range(1, len(df)):
    df.loc[i, 'sales'] = df.loc[i-1, 'sales'] * (1 + df.loc[i, 'growth'])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 06:40:29