2017-10-21 2 views
1

하나의 열로 구성된 큰 데이터 프레임 ('데이터')이 있습니다. 열의 각 행은 문자열로 구성되며 각 문자열은 쉼표로 구분 된 범주로 구성됩니다. 나는이 데이터를 하나의 핫 코드로 인코딩하고자한다. 쉼표로 구분 된 문자열의 데이터 프레임을 한 핫 코드로 변환합니다.

index  A  B.  C 
0   1  1  1 
1   0  1  1 
2   0  0  0 

나는이 어떻게 할 수있는

이에서 예를 들어

,

data = {"mesh": ["A, B, C", "C,B", ""]} 

나는 dataframe가 구성 좀하고 싶습니다?

답변

3

OHE는 다루지 않습니다. + stack + get_dummies + sumstr.split를 사용

옵션 1
.

df = pd.DataFrame(data) 
print(df) 
     mesh 
0 A, B, C 
1  C,B 
2   

df = df.mesh.str.split('\s*,\s*', expand=True)\ 
       .stack().str.get_dummies().sum(level=0) 
print(df) 
    A B C 
0 1 1 1 
1 0 1 1 
2 0 0 0 

옵션 2
apply + value_counts. Bharath Shetty에게서 배운 작은 트릭. reset_index 하였다 astype를 사용

df = df.mesh.str.split('\s*,\s*', expand=True)\ 
       .apply(pd.Series.value_counts, 1).iloc[:, 1:].fillna(0) 
print(df) 
    A B C 
0 1.0 1.0 1.0 
1 0.0 1.0 1.0 
2 0.0 0.0 0.0 

또한 하찮은 일에 속 태우고, :

df = df.astype(int).reset_index() 
print(df) 
    index A B C 
0  0 1 1 1 
1  1 0 1 1 
2  2 0 0 0 

옵션 3
pd.crosstab

x = df.mesh.str.split('\s*,\s*', expand=True).stack() 
df = pd.crosstab(x.index.get_level_values(0), x.values).iloc[:, 1:] 

print(df) 
col_0 A B C 
row_0   
0  1 1 1 
1  0 1 1 
2  0 0 0 
+0

''\ ''라인 continuati 인물과 그 들여 쓰기 - 내 눈! –

+1

정말 멋진 옵션을 게시하는 데 너무 빠릅니다. 이제 이건'pi-esque'입니다. – Dark

+0

@JonClements Lol dude ... 그들은'\'없이 더 악 해 보입니다 : p –

관련 문제