2016-07-12 2 views
0

내 데이터 프레임의 열 값을 부울 값으로 변환하는 방법을 찾고 있습니다. 아래의 데이터 프레임에는 x, y, z 열이 있습니다.pandas는 행 값을 이진 형식으로 변환합니다.

각 열의 모든 고유 값을 정렬하고 콜론으로 구분하여 참조 설명서를 만들었습니다. 마지막으로, 필자는 데이터 프레임에 내 딕트를 연결했습니다. 여기에 내 딕트는 { 'x': '0 : 1 : 10', 'y': '5:10', 'z': '0:10 : 300 '}.

이제 이러한 정렬 된 dict 값을 참조로 가져 와서 원하는 값으로 다음과 같이 이진 코드로 열 값을 변경하고 싶습니다.

내 dataframe :

_______________________________ 
| 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 | 

________________________________ 

이 바이너리 코딩 내 원하는 dataframe의 모습입니다.

원하는 출력 :

______________________________ 
| 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

이, 그러나 여기에서 생각하는 방법을 확장하지 않도록 :

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 
관련 문제