2016-07-12 8 views
0

私はブール値に私のデータフレームの列の値を変換する方法を探しています。私のデータフレームでは、x、y、zという列があります。pandasバイナリ形式に行の値を変換

私はコラムでソートされ、区切られた各列からすべての固有値を得た参照辞書を作成しました。最後に、私はデータフレームと私のdictを連結しました:ここで私のdictは{x: 300 '}。

これらのソートされたdict値を参考にして、私は自分のカラム値をバイナリコードに変更したいと思っています。

マイデータフレーム:

_______________________________ 
| x | y | z | 

| 0:1:10 | 5:10 | 0:10:300 | 
_______________________________ 
A | 0,1 | 10 | 10,300 | 

B | 1 | 5 | 300,0 | 

C | 10,0,1 | | 300,10 | 

________________________________ 

これは、バイナリコーディングで私の希望のデータフレームがどのように見えるかです。

所望の出力:

______________________________ 
| x | y | Z | 

| 0:1:10 | 5:10 | 0:10:300 | 
______________________________ 
A | 110 | 01 | 011 | 

B | 010 | 10 | 101 | 

C | 111 | 00 | 011 | 
_______________________________ 

おかげで、Rtut

答えて

1

これがあるが、ここでは1件のでしょうかスケーラブルではないことを確認:

df = pd.DataFrame([["0,1", "10", "10,300"], ["1", "5", "300,0"], ["10,1,0", "", "300,10"]], columns = ["x", "y", "z"]) 

bin_dict_x = {'0': 100, '1': 10, '10': 1} 
bin_dict_y = {'5': 10, '10': 1} 
bin_dict_z = {'0': 100, '10': 10, '300': 1} 

def to_bin(dct, entry): 
    out = 0 
    for i in entry.split(','): 
     if len(i) > 0: 
      out+= dct[i] 
    return str(out).zfill(len(dct)) 

df['x_bin'] = df.apply(lambda x: to_bin(bin_dict_x, x['x']), axis = 1) 
df['y_bin'] = df.apply(lambda x: to_bin(bin_dict_y, x['y']), axis = 1) 
df['z_bin'] = df.apply(lambda x: to_bin(bin_dict_y, x['z']), axis = 1) 

df[['x_bin','y_bin','z_bin']] 

    x_bin y_bin z_bin 
0 110 01 011 
1 010 10 101 
2 111 00 011 
関連する問題