二进制对具有多个值的分类变量进行编码

时间:2017-05-30 23:42:31

标签: python pandas

我在数据框中有一列有三种类型的值a,b和c。我希望所有的值都是1,b,c为0,所有这些都在一列中(这不是一个热编码)。我该怎么做?我尝试用if / else做一个for循环,但它没有用。

1 个答案:

答案 0 :(得分:2)

将布尔系列转换为10。考虑数据框df

np.random.seed([3,1415])
df = pd.DataFrame(dict(A=np.random.choice(list('abc'), size=10)))
print(df)

   A
0  a
1  c
2  c
3  c
4  c
5  b
6  b
7  c
8  a
9  c

然后

df.assign(B=df.A.eq('a').astype(int))

   A  B
0  a  1
1  c  0
2  c  0
3  c  0
4  c  0
5  b  0
6  b  0
7  c  0
8  a  1
9  c  0

或者更快一点

df.assign(B=(df.A.values == 'a').astype(int))

   A  B
0  a  1
1  c  0
2  c  0
3  c  0
4  c  0
5  b  0
6  b  0
7  c  0
8  a  1
9  c  0

计时

%timeit df.assign(B=df.A.eq('a').astype(int))
1000 loops, best of 3: 550 µs per loop

%timeit df.assign(B=(df.A.values == 'a').astype(int))
1000 loops, best of 3: 306 µs per loop