python中稀疏数据帧到密集数据帧的高效转换

2024-03-29 01:21:15 发布

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

我手头有个问题,我有一个数据帧,如下所示:

输入数据帧:

VEHICLE_HASH    LS_ID   UPPER_BOUND LS_RATIO

00061E31E25B36  PROMISELS103    2500.0  0.000684 

00061E31E25B36  PROMISELS103a   3000.0  0.002001 

00061E31E25B36  PROMISELS104    3500.0  0.004128 

0006254DB52066  PROMISELS104    4000.0  0.003216 

0006254DB52066  PROMISELS103    4500.0  0.001114 

0006254DB52066  PROMISELS105    5000.0  0.020767 

这是一个示例数据帧,实际数据帧的大小为(53526122 x 4)。现在我想把这个数据帧转换成一个OneHotEncoded矩阵,它的特征来自于由LS_IDUPPER_BOUND列组合而成的字符串。我能够进行一次热编码并将矩阵转换为稀疏矩阵,然后将稀疏矩阵与LS_ratio相乘,得到xgboost分类器的输入稀疏矩阵。在

现在我想把数据帧转换成这种密集格式,每行有一个唯一的HASH,具有多个列特性,这样我就可以对这些数据进行PCA了。但我得到out of memmory error。这能有效地完成吗?在

预期输出:

^{pr2}$

Tags: 数据id示例矩阵hashupperlsbound
1条回答
网友
1楼 · 发布于 2024-03-29 01:21:15

您可以尝试用分隔符LS_ID和{}列连接起来,构造交叉表(假设构造列和'VEHICLE_HASH'列中的所有元素都是唯一的),并用零填充NaN值:

import pandas as pd
import numpy as np

df = pd.DataFrame() # here should be your initial dataframe
df['ID_AND_BOUND'] = df['LS_ID'] + '_' + df['UPPER_BOUND'].astype(str)
df_processed = pd.crosstab(index=df['VEHICLE_HASH'],
                           columns=df['ID_AND_BOUND'],
                           values=df['LS_RATIO'],
                           aggfunc=np.mean)
df_processed = df_processed.reset_index().fillna(0)

相关问题 更多 >