You need to enable JavaScript to run this app. Pandas DataFrame中如何对相邻连续行应用对数函数计算
优惠活动
大模型
产品
解决方案
定价
更多

Pandas DataFrame中如何对相邻连续行应用对数函数计算

布伦特原油相邻交易日价格对数计算实现方案

核心逻辑

需求要求的逐行计算规则ln[X(i+1)/X(i)]等价于相邻两期价格的对数差,可通过pandas的向量化能力直接实现,无需逐行循环遍历,计算效率远高于自定义行级处理逻辑。

前置准备

  • 先将存储原油价格的DataFrame按交易日日期做升序排序,避免因日期乱序导致相邻值错位、计算结果失真
  • 校验价格列的数值属性,剔除值为0、负数或非数值的异常行,防止对数计算产生无效值

代码实现

以存储布伦特原油价格的列命名为brent_price为例,最终将计算结果存入新增列adjacent_log_ratio:

严格匹配需求对齐规则的版本(第i行存储对应计算值ln[X(i+1)/X(i)])

import numpy as np
# 计算相邻两期的对数比值,默认结果对齐到相邻对的较晚日期
df['_temp_log'] = np.log(df['brent_price'] / df['brent_price'].shift(1))
# 将结果向前偏移1行,对齐到相邻对的较早交易日,匹配需求规则
df['adjacent_log_ratio'] = df['_temp_log'].shift(-1)
# 清理临时列
df = df.drop(columns=['_temp_log'])

简化版本(利用pandas内置收益率API实现,计算结果精度无差异)

# 借助pct_change计算相邻变化率,再转换为对数收益并对齐
df['adjacent_log_ratio'] = np.log1p(df['brent_price'].pct_change()).shift(-1)

注意事项

  • 上述向量化计算逻辑对百万行级别的价格序列,运行耗时仅为毫秒级,远快于逐行apply的实现方式
  • 计算完成后可通过随机抽样校验:比如随机选第i行,手动代入np.log(df.loc[i+1, 'brent_price'] / df.loc[i, 'brent_price']),和计算列的值对比,确认对齐逻辑正确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 12:24:03