我想转换这样的东西:
['dog', 'cat', 'fish', 'dog', 'dog', 'bird', 'cat', 'bird']
到布尔矩阵中,矩阵的每一列中的每一列。对于此示例,将如下所示:
(dog) (cat) (fish) (bird)
1 0 0 0
0 1 0 0
0 0 1 0
1 0 0 0
1 0 0 0
0 0 0 1
0 1 0 0
0 0 0 1
根据分类,将值设置为true的位置。我知道我可以像这样重复执行此操作(伪代码):
class = array of classifications
new = array of size [amt of classifications, len(class)]
for i, c in enumerate(class):
if c == 'dog':
new[i][0] = 1
elif c == 'cat':
new[i][1] = 1
# and so on
我觉得在numpy或pandas中有一种更有效的方法(因为我最初将数据作为DataFrame转换为numpy数组,所以我不介意使用pandas解决方案)。
最佳答案
使用也接受get_dummies
的list
:
a = ['dog', 'cat', 'fish', 'dog', 'dog', 'bird', 'cat', 'bird']
df = pd.get_dummies(a)
print (df)
bird cat dog fish
0 0 0 1 0
1 0 1 0 0
2 0 0 0 1
3 0 0 1 0
4 0 0 1 0
5 1 0 0 0
6 0 1 0 0
7 1 0 0 0
如果列的顺序很重要,请在
reindex
中添加unique
:df = pd.get_dummies(a).reindex(columns=pd.unique(a))
print (df)
dog cat fish bird
0 1 0 0 0
1 0 1 0 0
2 0 0 1 0
3 1 0 0 0
4 1 0 0 0
5 0 0 0 1
6 0 1 0 0
7 0 0 0 1
关于python - 将单列分类的numpy数组/ Pandas DataFrame转换为多列 bool 矩阵(每种分类类型一列),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49013787/