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
所以我有以下数据集
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