2016-10-01 1 views
2

나는 다음과 같은 팬더 dataframe 있습니다pandas DataFrame 열을 피벗하여 이진 "값 테이블"을 만드는 방법은 무엇입니까?

import pandas as pd 
df = pd.read_csv("filename.csv") 

df 
    A B   C   D  E  
0 a 0.469112 -0.282863 -1.509059 cat 
1 c -1.135632 1.212112 -0.173215 dog 
2 e 0.119209 -1.044236 -0.861849 dog 
3 f -2.104569 -0.494929 1.071804 bird 
4 g -2.224569 -0.724929 2.234213 elephant 
... 
나는 dataframe은 다음과 같습니다하도록 column E의 범주 값의 ID에 따라 더 많은 열을 만들고 싶습니다

:이다

df 
     A B   C   D  cat dog  bird elephant ....  
    0 a 0.469112 -0.282863 -1.509059 -1  0  0  0 
    1 c -1.135632 1.212112 -0.173215 0  -1  0  0 
    2 e 0.119209 -1.044236 -0.861849 0  -1  0  0 
    3 f -2.104569 -0.494929 1.071804 0  0  -1  0 
    4 g -2.224569 -0.724929 2.234213 0  0  0  0 
    ... 

을, 값이 존재하는 경우 E 열의 값을 E 값을 기반으로하는 이진 행렬로 피벗시키고 1을주고 다른 모든 열은 0을 여기에 나타냅니다 (여기서는 -1이되고 싶습니다. 또는 "부정 이진 행렬")?

팬더의 어떤 기능이 가장 좋을지 모르겠다. 아마도 pandas.DataFrame.unstack()?

감사합니다.

답변

2

사용 pd.concat, dropget_dummies

pd.concat([df.drop('E', 1), pd.get_dummies(df.E).mul(-1)], axis=1) 

enter image description here

+0

감사합니다! 나는 이것을 위해 특별한 기능이 필요하다고 생각했다 ... – ShanZhengYang