如何基于现有pandas DataFrame构造上三角矩阵格式的DataFrame
你不需要额外构造三角矩阵DataFrame再合并,直接用numpy内置的上三角生成工具配合广播赋值就能一步实现,连提前循环新增空列的步骤都能省掉。
完整可运行代码如下:
import pandas as pd import numpy as np # 初始化原始DataFrame df = pd.DataFrame({'a':['a1','a2','a3','a4','a5'],'b':[1,2,3,4,5]}) # 生成上三角布尔掩码:对角线及以上位置为True,下三角为False tri_mask = np.triu(np.ones((len(df), len(df)), dtype=bool)) # 按掩码赋值,直接生成目标列 df[list(range(len(df)))] = np.where(tri_mask, df['a'].values.reshape(-1, 1), np.nan)
运行后输出的结果和你需要的上三角格式完全一致:
a b 0 1 2 3 4 0 a1 1 a1 a2 a3 a4 a5 1 a2 2 NaN a2 a3 a4 a5 2 a3 3 NaN NaN a3 a4 a5 3 a4 4 NaN NaN NaN a4 a5 4 a5 5 NaN NaN NaN NaN a5
如果你已经按之前的步骤提前新增了全NaN的列,直接运行下面一行代码就能完成赋值:
df[list(range(len(df)))] = np.where(np.triu(np.ones((len(df), len(df)), dtype=bool)), df['a'].values.reshape(-1,1), np.nan)
内容的提问来源于stack exchange,提问作者luki
相关产品推荐
相关产品推荐

