You need to enable JavaScript to run this app. 如何将矩形DataFrame转换为三角形DataFrame?
优惠活动
大模型
产品
解决方案
定价
更多

如何将矩形DataFrame转换为三角形DataFrame?

实现方案

先说下之前代码跑不通的原因:

  • 传参搞反了:cl.Triangle() 要收的是原始待处理的DF1,你把目标DF2传进去了,逻辑从根上就错了
  • 工具不匹配:chainladder 是精算场景专门处理流量三角形的库,默认识别事故期、发展期的标准格式,默认保留左下三角的已知值,和你要的逐行右向截断的上三角规则对不上,直接用不仅出不来正确结果,还容易报格式校验的错

最简便的实现(纯pandas/numpy几行搞定,无需依赖精算库)

你要的三角结构规则非常明确:从上到下逐行排列,第i行(第一行行号算0)只要列位置大于 总列数-1 - 行号 的单元格,全部填充为NaN,执行完即可和你给出的DF2结构完全对齐:

import pandas as pd
import numpy as np

# 复制原DF1,不改动原始数据
DF2 = DF1.copy()
row_num, col_num = DF2.shape

# 生成和DF2同形状的位置索引矩阵
col_pos = np.tile(np.arange(col_num), (row_num, 1))
row_pos = np.arange(row_num).reshape(-1, 1)

# 标记需要清空为NaN的位置
drop_mask = col_pos > (col_num - 1 - row_pos)

# 批量赋值
DF2.values[drop_mask] = np.nan

运行后的结果完全匹配目标要求:

  • OP8、OP10 两行保留所有原始列的数值
  • 从OP5开始,每往下一行,就把最右侧一列的数值清空为NaN
  • 最后一行OP9 所有列均为NaN

关于chainladder的使用

如果后续要对转换好的三角结构做精算相关分析,直接把生成好的DF2传入cl.Triangle()就可以,没必要在数据格式转换环节依赖这个库,不然还得适配它的格式校验规则,反而增加不必要的麻烦。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 11:15:02