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

Python中如何对pandas DataFrame不同行应用不同公式计算方差

实现方案

原有代码问题梳理

  • 第一处笔误:pandas生成DataFrame的方法名是pd.DataFrame(首字母F大写),你写的pd.Dataframe会直接报错
  • 你尝试用的agg写法不适用当前场景:递推计算依赖上一行已经计算出的方差结果,agg无法直接按顺序复用前序行的计算结果,同时你写的x.shift(-1)、returns[:2]存在维度不匹配、索引对应错误的问题,自然运行报错。

正确可运行代码

import numpy as np
import pandas as pd

# 生成样例DataFrame
df = pd.DataFrame({
    'a': range(1,7),
    'b': [x**2 for x in range(1,7)],
    'c': [x**3 for x in range(1,7)]
})

# 计算收益率DataFrame
returns = df.pct_change()

# 初始化存储方差的DataFrame
lamb = 0.94
d = pd.DataFrame(0, index=np.arange(len(returns)), columns=returns.columns)
# 第一行填充传统方差结果
d.iloc[0] = returns.var()

# 从第二行开始按递推公式填充
for i in range(1, len(d)):
    d.iloc[i] = lamb * d.iloc[i-1] + (1 - lamb) * (returns.iloc[i-1] ** 2)

代码说明

  • 用循环逐行计算从第二行到最后一行的方差值,完全匹配你给出的递推规则:当前行方差 = λ * 上一行方差 + (1-λ) * 上一行收益率的平方
  • 所有计算的列维度自动对齐,不需要额外处理列匹配问题

注意:df.pct_change()生成的收益率DataFrame第一行(索引0)为NaN,如果你的业务逻辑中递推需要用到有效收益率值,可以根据需求调整起始计算的索引,比如将d的第一行有效值对应到returns的索引1位置,修改循环起始和初始值填充逻辑即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 14:54:07