如何将矩形数据框转换为三角形数据框?

2024-05-19 12:24:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我有数据帧DF1:


             DP1       DP2       DP3       DP4       DP5       DP6       DP7       DP8    DP9
    OP8   0.693521  1.648789 -0.136742  0.879296  0.543789 -0.911603  0.686688  0.648148  NaN 
    OP10  0.197277  1.648789 -0.136742  0.879296  0.543789 -0.911603  0.686688  0.648148  NaN 
    OP5  -1.541781  0.690276 -0.682243  0.005062  0.543789 -0.911603  0.686688  0.648148  NaN 
    OP3   1.290664 -0.179395  0.006131  0.851467 -1.142673  0.762150  0.686688  0.648148  NaN 
    OP7  -0.942493  0.765121 -0.136742  0.879296  0.543789 -0.911603  0.686688  0.648148  NaN 
    OP2   0.029633  0.046765  0.631446 -0.609291 -0.322024  0.943548  0.348351  0.648148  NaN 
    OP4   1.501141 -1.229722  1.838385 -1.596967 -0.282486 -0.911603  0.686688  0.648148  NaN 
    OP1  -0.519549 -1.118106 -1.150978  0.773364  1.492468 -0.854160 -1.196905 -0.756595  NaN 
    OP6  -0.196714 -0.664541 -0.635718  0.879296  0.543789 -0.911603  0.686688  0.648148  NaN 
    OP9   0.197277  1.648789 -0.136742  0.879296  0.543789 -0.911603  0.686688  0.648148  NaN 

我有一个矩形数据框(DF1),我想把它做成三角形数据框(DF2):


         DP1       DP2       DP3       DP4       DP5       DP6       DP7       DP8    DP9
    OP8   0.693521  1.648789 -0.136742  0.879296  0.543789 -0.911603  0.686688  0.648148  NaN 
    OP10  0.197277  1.648789 -0.136742  0.879296  0.543789 -0.911603  0.686688  0.648148  NaN 
    OP5  -1.541781  0.690276 -0.682243  0.005062  0.543789 -0.911603  0.686688    NaN     NaN 
    OP3   1.290664 -0.179395  0.006131  0.851467 -1.142673  0.762150    NaN       NaN     NaN 
    OP7  -0.942493  0.765121 -0.136742  0.879296  0.543789   NaN        NaN       NaN     NaN 
    OP2   0.029633  0.046765  0.631446 -0.609291   NaN       NaN        NaN       NaN     NaN 
    OP4   1.501141 -1.229722  1.838385   NaN       NaN       NaN        NaN       NaN     NaN 
    OP1  -0.519549 -1.118106   NaN       NaN       NaN       NaN        NaN       NaN     NaN 
    OP6  -0.196714   NaN       NaN       NaN       NaN       NaN        NaN       NaN     NaN 
    OP9   NaN        NaN       NaN       NaN       NaN       NaN        NaN       NaN     NaN 

为了制作三角形数据框,我使用了以下代码:

import chainladder as cl
triangle = cl.Triangle(DF2)


Tags: 数据nandf1op5dp1dp2dp4dp3
1条回答
网友
1楼 · 发布于 2024-05-19 12:24:21

你可以这样试试。使用numpy创建布尔掩码,翻转它,然后分配np.nan

import numpy as np

# Create a matrix of 1 with the same shape of df.
# Set it to bool so to have a matrix of Trues
mask = np.ones(df.shape, dtype = 'bool')

# Assign False to the lower triangle of the matrix
mask[np.triu_indices(n = df.shape[0], k = 0, m = df.shape[1])] = False

# Flip the mask horizontally
mask = mask[:, ::-1]

# Now the mask will have Trues over the values you don't want to keep
# and False over the values you want to keep
# Assign np.nan [NaN] where the mask is True.
df[mask] = np.nan
print(df)

               DP1       DP2       DP3  ...       DP7       DP8     DP9
    OP8   0.693521  1.648789 -0.136742  ...  0.686688  0.648148    NaN 
    OP10  0.197277  1.648789 -0.136742  ...  0.686688  0.648148     NaN
    OP5  -1.541781  0.690276 -0.682243  ...  0.686688       NaN     NaN
    OP3   1.290664 -0.179395  0.006131  ...       NaN       NaN     NaN
    OP7  -0.942493  0.765121 -0.136742  ...       NaN       NaN     NaN
    OP2   0.029633  0.046765  0.631446  ...       NaN       NaN     NaN
    OP4   1.501141 -1.229722  1.838385  ...       NaN       NaN     NaN
    OP1  -0.519549 -1.118106       NaN  ...       NaN       NaN     NaN
    OP6  -0.196714       NaN       NaN  ...       NaN       NaN     NaN
    OP9        NaN       NaN       NaN  ...       NaN       NaN     NaN

[10 rows x 9 columns]

相关问题 更多 >