如何合并两列并应用二值化器?

时间:2019-06-01 04:03:29

标签: numpy

尝试使用MultiLabelBinarizer并无法正常工作

例如:设备类别(具有两个值-android和ios),浏览器(3个值chrome,safari和IE)是两列...如果设备类别和浏览器列中的android值存在android值,则使用Binarizer androd_safari的列名称必须将值设置为1 ...这样,将有6个二值化器列,其值为0或1

我需要编写自己的函数还是可以使用内置的数据框函数

1 个答案:

答案 0 :(得分:0)

有几种方法可以使用LocalEncoder,LabelBinarizer对训练/测试集数据进行标准化,但是这些方法仅应用于单列

要基于两列创建二值化(以标记数据集),请创建一个临时DataFrame并执行以下操作:

import timeit
import numpy as np
import pandas as pd

def two_col_binarizer(df, col1, col2):
    start_time = timeit.default_timer()
    arcol1 = df[col1].unique()
    arcol2 = df[col2].unique()
    arbdc = np.empty((arcol1.size*arcol2.size), dtype=object)

    for i in range(arcol1.size):
        for j in range(arcol2.size):
            arbdc[i*arcol2.size+j] = arcol1[i]+arcol2[j]

    num_rows, num_cols = df.shape
    tempdf = pd.DataFrame(index=range(0, num_rows), columns = arbdc)
    tempdf = tempdf.fillna(0)

    for i in range(len(df.index)):
        tempdf.at[i, df['device.deviceCategory'][i]+df['device.browser'][i]] = 1

    print(timeit.default_timer() - start_time)
    return tempdf

# for example your training data set has devicecategory and browser columns
df=df.join(two_col_binarizer(df, 'devicecategory', 'browser'))