如何将分组的熊猫数据帧转换为numpy 3d数组并应用右填充?

时间:2019-09-08 07:07:30

标签: python-3.x pandas sequence numpy-ndarray

为了将数据输入LSTM网络以预测剩余使用寿命(RUL),我需要创建3D numpy数组(机器数量,序列数量,变量数量)。

我已经尝试结合stackoverflow的解决方案并设法创建一个原型(您可以在下面看到)。

import numpy as np
import tensorflow as tf
import pandas as pd

df = pd.DataFrame({'ID': [1, 1, 2, 3, 3, 3, 3],
                   'V1': [1, 2, 2, 3, 3, 4, 2],
                   'V2': [4, 2, 3, 2, 1, 5, 1],
                  })

df_desired_result = np.array([[[1, 4], [2, 2], [-99, -99]],
                       [[2, 3], [-99, -99], [-99, -99]],
                       [[3, 2], [3, 1], [4, 5]]])

max_len = df['ID'].value_counts().max()

def pad_df(df, cols, max_seq, group_col= 'ID'):
    array_for_pad = np.array(list(df[cols].groupby(df[group_col]).apply(pd.DataFrame.as_matrix)))
    padded_array = tf.keras.preprocessing.sequence.pad_sequences(array_for_pad,
                                                                 padding='post',
                                                                 maxlen=max_seq,
                                                                 value=-99
                                                                )
    return padded_array

#testing prototype
pad_df(df, ['V1', 'V2'], max_len)

但是,当我将上述代码应用于数据时,它将正确应用右填充,但所有值均设置为0.0。 我无法完全弄清楚这种行为,我注意到在函数的第一行中,我返回了一个带有嵌套数组的数组,该数组带有“ array_for_pad”的嵌套数组。 这是结果的屏幕截图: result padding

0 个答案:

没有答案