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

如何用Pandas透视表高效实现全Strike组合的价格差值计算?

解决方案

核心思路

利用NumPy的向量化广播实现高效计算,无需循环或复杂聚合,直接生成所有行权价组合的价格差值矩阵(可灵活控制差值计算方向)。

具体代码实现

假设你的原始DataFrame名为df,执行以下步骤:

import pandas as pd
import numpy as np

# 1. 提取核心数据:行权价序列和对应价格数组
strikes = df['Strike']
prices = df['Price'].values

# 2. 广播计算差值矩阵:行行权价的价格 - 列行权价的价格
# 若需要反向差值(列价格 - 行价格),改为 prices - prices[:, np.newaxis]
diff_matrix = prices[:, np.newaxis] - prices

# 3. 转换为目标格式的DataFrame
result_df = pd.DataFrame(
    diff_matrix,
    index=strikes,
    columns=strikes
)
# 设置行索引名称
result_df.index.name = 'Strike'

代码说明

  • prices[:, np.newaxis]将一维价格数组转为二维列向量,与原一维数组触发广播运算,瞬间生成N×N的差值矩阵,效率远高于循环或aggfunc方式。
  • 最终的result_df完全匹配你需要的矩阵结构,行和列均为行权价,单元格为对应价格差值。

测试验证

用你提供的测试数据运行代码:

# 测试数据
data = {
    'Strike': [15000, 15100, 15200],
    'Strike2': [15000, 15100, 15200],
    'Price': [100, 150, 170]
}
df = pd.DataFrame(data)

输出的result_df为:

Strike   15000  15100  15200
Strike                      
15000       0    -50    -70
15100      50      0    -20
15200      70     20      0

若需要你示例中的正向差值(列价格 - 行价格),只需将差值计算代码改为diff_matrix = prices - prices[:, np.newaxis],即可得到:

Strike   15000  15100  15200
Strike                      
15000       0     50     70
15100     -50      0     20
15200     -70    -20      0

(注:你示例中15000行15200列的120、15200行15000列的-170应为笔误,正确差值为70和-70)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 09:37:44