【问题标题】:converting a sparse dataframe to dense Dataframe in python efficiently在python中有效地将稀疏数据帧转换为密集数据帧
【发布时间】:2017-10-11 19:42:24
【问题描述】:

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

输入数据框:

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。这可以有效地完成吗?

预期输出:

HASH    PROMISELS103a_3000.0    PROMISELS103_2500.0 PROMISELS103_4500.0 PROMISELS104_3500.0 PROMISELS104_4000.0 PROMISELS105_5000.0

00061E31E25B36  0.002001        0.000684        0           0           0.004128        0                

0006254DB52066  0           0           0.001114        0.003216        0           0.020767 

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    您可以尝试使用分隔符'_' 连接LS_IDUPPER_BOUND 列,构造交叉表(假设构造列中的所有元素和'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)
    

    【讨论】:

      猜你喜欢
      • 2016-09-09
      • 1970-01-01
      • 2021-02-01
      • 2016-08-03
      • 2018-04-08
      • 2015-09-14
      • 1970-01-01
      • 1970-01-01
      • 2016-02-01
      相关资源
      最近更新 更多