pandas 包含特征列表的单热编码列,每个特征都可以是负数

pandas one-hot-encoding column containing a list of feature and each feature can be negative

所以我有以下数据集

d = {'user': ['a','a','b','b'], 'item':[1, 2, 1, 3], 'features': [[2], [-2, -1], [-137, -1, 2], [-137, 2, 1]]}
df = pd.DataFrame(data=d)

        user       item     features
0     a            1        [2]
1     a            2        [-2, -1]
2     b            1        [-137, -1, 2]
3     b            3        [-137, 2, 1]

我正在尝试获取以下数据集:

        user       item     '2'    '1'    '137'
0     a            1        1      0      0
1     a            2        -1     -1     0
2     b            1        1      -1     -1
3     b            3        1      1      -1

我尝试使用:

dataset = load_dataset()
mlb = MultiLabelBinarizer()
dataset = dataset.join(pd.DataFrame(mlb.fit_transform(dataset.pop('features')),
                          columns=mlb.classes_,
                          index=dataset.index))

但我得到了这个:

        user       item     '-1' '-137'  '-2' '1' '2'
0     a            1        0    0       0    0   1
1     a            2        1    0       1    0   0
2     b            1        1    1       0    0   1
3     b            3        0    1       0    1   1

有人可以帮我吗?

在 pandas 中,可以按如下方式完成:

df1 = df.explode('features')
df1['f1'] = abs(df1.features)
df1['f2'] = np.sign(df1.features)
df1.pivot(['user', 'item'], 'f1', 'f2').fillna(0).reset_index()

f2 user  item  1  2  137
0     a     1  0  1    0
1     a     2 -1 -1    0
2     b     1 -1  1   -1
3     b     3  1  1   -1