我有一个看起来像这样的备用数组
N M
a cat
b cat
c cat
a dog
d dog
e dog
我需要以这种格式表示:
cat dog
a 1 1
b 1 0
c 1 0
d 0 1
e 0 1
使用scikits - 了解我该怎么做?
我的原始数据如下所示:
[{"N":"a"},{"M":"cat"},{"N":"a"},{"M":"dog"}...]
单元格但是二进制,将用于nmf算法。
如果我运行以下内容:
data = [{"N":"a"},{"M":"cat"},{"N":"a"},{"M":"dog"}]
v = DictVectorizer(sparse=False)
[[ 0. 0. 1.]
[ 1. 0. 0.]
[ 0. 0. 1.]
[ 0. 1. 0.]]
但它看起来应该是这样的:
1 1
由于
答案 0 :(得分:0)
如果我理解正确,我认为你只需要使用" M"用于构建编码的列。
v = DictVectorizer(sparse=False) # sparse=False now
data = [{"N":"a"},{"M":"cat"},{"N":"a"},{"M":"dog"}]
filtered_data = (d for d in data if "M" in d.keys()) # filter out "N"
v.fit_transform(filtered_data)
# output
array([[ 1., 0.],
[ 0., 1.]])
做 pandas' 方式。
import pandas as pd
pd.concat([df.N, df.M.str.get_dummies()], axis=1)
N cat dog
0 a 1 0
1 b 1 0
2 c 1 0
3 a 0 1
4 d 0 1
5 e 0 1
df.M.str.get_dummies()
将生成:
cat dog
0 1 0
1 1 0
2 1 0
3 0 1
4 0 1
5 0 1