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

如何在Pandas中基于前一行数据按分组应用公式计算标准化股价

实现方案

不需要手动编写for循环,用Pandas内置的分组和累计乘积功能就能高效完成计算,代码如下:

import pandas as pd
# 原始数据集构造代码
data = [['2020-01-01', 'A', 0.05], ['2020-01-02', 'A', 0.06], ['2020-01-03', 'A', 0.12], ['2020-01-04', 'A', 0.09], ['2020-01-05', 'A', 0.07],   ['2020-01-01', 'B', 0.10], ['2020-01-02', 'B', 0.20], ['2020-01-03', 'B', 0.15], ['2020-01-04', 'B', 0.12], ['2020-01-05', 'B', 0.18],    ['2020-01-01', 'C', 0.05], ['2020-01-02', 'C', 0.11], ['2020-01-03', 'C', 0.18], ['2020-01-04', 'C', 0.09], ['2020-01-05', 'C', 0.22]]
df = pd.DataFrame(data, columns = ['DATE', 'Stock', 'Return'])

# 核心计算逻辑
df['Price'] = df.groupby('Stock')['Return'].apply(lambda x: (1 + x).cumprod() * 100).round(2)

执行上述代码后输出df即可得到你预期的结果。

逻辑说明

  • 先用groupby('Stock')对数据按股票代码拆分,保证不同股票的计算相互独立
  • 对每只股票的收益率序列计算(1+收益率)的累计乘积,这一步和你给出的递推公式Pt = Pt-1 * (1+rt)逻辑完全等价,cumprod默认从第一个值开始累计,初始基准值为1,乘以100刚好匹配t=-1时刻基准价格为100的要求
  • 最后用round(2)保留两位小数,和示例输出的格式对齐

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 11:06:01