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

Pandas无循环实现分组滚动计算滞后价格与(1+Factor)乘积填充空值

分组滚动乘积填充Price列的无循环实现方案
import pandas as pd
import numpy as np

# 初始数据构造
d = {'Group': [1,1,1,1], 'Year': [2023, 2024, 2025, 2026],
     'Price': [17.324, np.NaN, np.NaN, np.NaN], 'Factor': [0.019, 0.021, 0.022, 0.022]}
df = pd.DataFrame(data=d)

# 核心计算逻辑
df['Price'] = df.groupby('Group', group_keys=False).apply(
    lambda x: x['Price'].iloc[0] * (1 + x['Factor'].shift(fill_value=0)).cumprod()
)

方案逻辑说明

本方案用累积乘积算子cumprod替代自定义滚动函数,全程无显式循环,性能远高于逐行迭代:

  • 每个分组取首个非空Price作为计算初始基数
  • 对Factor列做位移处理,首行填充0,保证首年乘子为1,计算结果等于初始Price
  • 对位移后的1+Factor列做累积乘积,再乘初始基数即可直接得到所有年份的Price值

计算结果完全匹配预期:

GroupYearPriceFactor
1202317.3240000.019
1202417.6531560.021
1202518.0238720.022
1202618.4203970.022

原有方案失效原因

  1. rolling思路不匹配需求:rolling是固定窗口的聚合计算,你需要的是贯穿全组的累积迭代计算,cumprod才是适配的算子
  2. 自定义函数逻辑不完整:仅能计算出第二期的Price,没有将计算出的新值回填到Price列参与后续计算,第三期及以后的计算会因为拿到原始NaN值返回空结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 05:51:03