如何用Python生成远期掉期结构的0-1数组并转为DataFrame?
生成对应远期起始掉期的0-1矩阵DataFrame
核心逻辑
每个远期起始掉期nYmY(起始期限n,掉期期限m,满足n+m ≤ N)对应两个即期掉期:nY和n+mY。因此矩阵的每一行对应一个远期掉期,该行中nY和n+mY对应的列位置填充1,其余位置为0。
代码实现
import pandas as pd import numpy as np def create_forward_swap_matrix(max_tenor): # 生成所有远期掉期名称作为行索引 row_labels = [] for start in range(1, max_tenor): for tenor in range(1, max_tenor - start + 1): row_labels.append(f"{start}Y{tenor}Y") # 生成即期掉期期限作为列名 col_labels = [f"{k}Y" for k in range(1, max_tenor + 1)] # 初始化全0矩阵 matrix = np.zeros((len(row_labels), len(col_labels)), dtype=int) # 填充1的位置 row_idx = 0 for start in range(1, max_tenor): for tenor in range(1, max_tenor - start + 1): # 找到对应即期掉期的列索引 col_start = start - 1 col_end = (start + tenor) - 1 matrix[row_idx, col_start] = 1 matrix[row_idx, col_end] = 1 row_idx += 1 # 转换为DataFrame return pd.DataFrame(matrix, index=row_labels, columns=col_labels)
测试示例
当输入max_tenor=5时,调用函数返回的DataFrame如下:
1Y 2Y 3Y 4Y 5Y 1Y1Y 1 1 0 0 0 1Y2Y 1 0 1 0 0 1Y3Y 1 0 0 1 0 1Y4Y 1 0 0 0 1 2Y1Y 0 1 1 0 0 2Y2Y 0 1 0 1 0 2Y3Y 0 1 0 0 1 3Y1Y 0 0 1 1 0 3Y2Y 0 0 1 0 1 4Y1Y 0 0 0 1 1
说明
- 矩阵行数为
N*(N-1)/2(所有远期掉期的数量),列数为N(即期掉期的数量)。 - 该矩阵可直接用于矩阵乘法场景,比如关联即期掉期与远期掉期的现金流或价格计算。
内容的提问来源于stack exchange,提问作者workinghard
相关产品推荐
相关产品推荐

