2017-05-30 7 views
2

データフレームにa、b、cの3種類の値を持つ列があります。私はすべてのaの値を1に、b、cを0にして、すべてを1つの列に入れたい(これは1つのホットエンコーディングではない)。どうすればいい? 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 
関連する問題