2017-05-30 70 views
2

我有一个数据框中的列有三种类型的值a,b和c。我希望所有的a值都是1,b和c都是0,所有这些都在一列中(这不是一个热门编码)。我将如何做到这一点?我试着用if/else做一个for循环,但没有奏效。二进制编码一个具有多个值的分类变量

回答

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 
相关问题