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

如何在时间序列中新增列计算当日/昨日价格的自然对数?

解决方案

要计算当日Promedio与昨日Promedio比值的自然对数,核心是拿到前一天的Promedio值和当日做比较,你之前的代码没做移位操作,所以达不到效果。直接用pandas的shift()函数就能搞定,这是时间序列处理移位的标准方法:

方法一:直接计算比值再取对数

import numpy as np
import pandas as pd

# 核心代码:用shift(1)获取前一行(昨日)的Promedio值
Accion1['Rentabilidad'] = np.log(Accion1['Promedio'] / Accion1['Promedio'].shift(1))

方法二:对数相减(结果和方法一完全一致)

根据对数运算法则,ln(a/b) = ln(a) - ln(b),也可以这么写:

Accion1['Rentabilidad'] = np.log(Accion1['Promedio']) - np.log(Accion1['Promedio'].shift(1))

处理缺失值

因为第一行没有前一天的数据,计算后会得到NaN,如果需要去掉这一行可以用:

Accion1 = Accion1.dropna(subset=['Rentabilidad'])

或者用特定值填充(比如0):

Accion1['Rentabilidad'] = Accion1['Rentabilidad'].fillna(0)

为什么你之前的方法不行?

  • 你写的np.log(Accion1['Promedio'])只是对当日价格单独取对数,没有和昨日价格做比值计算;
  • 用iloc[0]/iloc[1]是固定取第一行和第二行的比值,不是逐行对应“当日/昨日”的关系,完全不符合时间序列的逐行移位需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 17:15:53