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

如何在Pandas中基于前一行销售额与增长率计算替换目标行销售额?

高效替换Pandas中特定年份的销售额值

基础单分类场景

针对你提供的示例数据,无需循环,可通过以下两种高效方式实现需求:

方式1:精准替换2022年的销售额

直接定位2021年的销售额和2022年的增长率,计算后替换目标值:

import pandas as pd

y = pd.DataFrame({
    "year": [2018,2019, 2020, 2021, 2022],
    "sales" : [100, 128, 99, 122, 0],
    "gth": [0,0,0,0,0.11]
})

# 获取2021年销售额和2022年增长率
sales_2021 = y.loc[y['year'] == 2021, 'sales'].iloc[0]
gth_2022 = y.loc[y['year'] == 2022, 'gth'].iloc[0]

# 替换2022年销售额
y.loc[y['year'] == 2022, 'sales'] = sales_2021 * (1 + gth_2022)
print(y)

方式2:通用适配所有销售额为0的年份

如果数据中所有sales=0的行都需要用上一年销售额计算,可结合shift()和np.where()实现向量化替换(效率更高,适合大数据集):

import pandas as pd
import numpy as np

y = y.sort_values('year')  # 确保数据按年份排序
y['sales'] = np.where(
    y['sales'] == 0,
    y['sales'].shift(1) * (1 + y['gth']),
    y['sales']
)
print(y)

多分类场景适配

如果数据集包含多分类(如不同产品/区域),只需通过groupby()按分类分组后,再执行shift()操作即可,同样无需循环:

import pandas as pd
import numpy as np

# 示例多分类数据
y_multi = pd.DataFrame({
    'category': ['A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B'],
    'year': [2018,2019,2020,2021,2022,2018,2019,2020,2021,2022],
    'sales': [100,128,99,122,0,80,90,85,95,0],
    'gth': [0,0,0,0,0.11,0,0,0,0,0.08]
})

# 按分类分组后,对每个组内的销售额做替换
y_multi['sales'] = np.where(
    y_multi['sales'] == 0,
    y_multi.groupby('category')['sales'].shift(1) * (1 + y_multi['gth']),
    y_multi['sales']
)
print(y_multi)

核心优势

上述方法均采用Pandas/Numpy的向量化操作,底层基于C语言实现,比Python原生循环效率提升数倍,完全适配大规模数据集的处理需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 04:55:24