Convierte el dataframe de cadenas separadas por comas a codificado en caliente

Tengo un gran dataframe (“datos”) formado por una columna. Cada fila de la columna está formada por una cadena y cada cadena está formada por categorías separadas por comas. Deseo codificar en caliente estos datos.

Por ejemplo,

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

A partir de esto me gustaría obtener un dataframe que consiste en:

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

¿Cómo puedo hacer esto?

Tenga en cuenta que no está tratando con OHEs.

str.split + stack + get_dummies + sum

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

apply + value_counts

 (df.mesh.str.split(r'\s*,\s*', expand=True) .apply(pd.Series.value_counts, 1) .iloc[:, 1:] .fillna(0, downcast='infer')) ABC 0 1 1 1 1 0 1 1 2 0 0 0 

pd.crosstab

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

Supuse que hay una respuesta más simple, o sentí que esto es más simple en comparación con las múltiples operaciones que tenemos que hacer.

  1. Asegúrese de que la columna tenga valores únicos separados por comas

  2. Utilice los dummies en el parámetro incorporado para especificar el separador como coma. El valor predeterminado para esto es tubería separada.

     data = {"mesh": ["A, B, C", "C,B", ""]} sof_df=pd.DataFrame(data) sof_df.mesh=sof_df.mesh.str.replace(' ','') sof_df.mesh.str.get_dummies(sep=',') 

SALIDA:

  ABC 0 1 1 1 1 0 1 1 2 0 0 0