从一个热编码列创建差异列

时间:2019-02-15 18:06:47

标签: python pandas feature-extraction

我正在尝试在数据集上创建一些额外的功能。我想从已经热编码的要素中获取空间上下文。例如,我有这个:

    F1    F2    F3    F4
1   0     1     1     0
2   1     0     1     1
3   1     0     0     0
4   0     0     0     1

我想针对此处的值创建一些新列:

    F1    F2    F3    F4    S1    S2    S3    S4
1   0     1     1     0     0     2     1     0
2   1     0     0     1     1     0     0     3
3   1     0     0     0     1     0     0     0
4   0     0     0     1     0     0     0     4

我希望有一种简单的方法来执行此操作,以计算列的最后一个值的变化并将其输出到相应的列。谢谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您可以这样做:

def func(x):
    # create result array
    result = np.zeros(x.shape, dtype=np.int)

    # get indices of array distinct of zero
    w = np.argwhere(x).ravel()

    # compute the difference between consecutive indices and add the first index + 1
    array = np.hstack(([w[0] + 1], np.ediff1d(w)))

    # set the values on result
    np.put(result, w, array)

    return result


columns = ['S{}'.format(i) for i in range(1, 5)]
s = pd.DataFrame(df.ne(0).apply(func, axis=1).values.tolist(),
                 columns=columns)

result = pd.concat([df, s], axis=1)
print(result)

输出

   F1  F2  F3  F4  S1  S2  S3  S4
0   0   1   1   0   0   2   1   0
1   1   0   0   1   1   0   0   3
2   1   0   0   0   1   0   0   0
3   0   0   0   1   0   0   0   4

请注意,您需要导入numpy(import numpy as np)才能使func工作。这样做的目的是找到零个不同的索引,计算连续值之间的差,将第一个值设置为index + 1,然后对每一行进行此操作。