Quiero decir algo como esto:¿Cómo discretizo los valores en un DataFrame de pandas y los convierto en una matriz binaria?
Tengo un DataFrame
con columnas que pueden ser categóricas o nominales. Para cada observación (fila), quiero generar una nueva fila donde cada valor posible para las variables ahora es su propia variable binaria. Por ejemplo, esta matriz (primera fila es etiquetas de columna)
'a' 'b' 'c'
one 0.2 0
two 0.4 1
two 0.9 0
three 0.1 2
one 0.0 4
two 0.2 5
sería convertido en algo como esto:
'a' 'b' 'c'
one two three [0.0,0.2) [0.2,0.4) [0.4,0.6) [0.6,0.8) [0.8,1.0] 0 1 2 3 4 5
1 0 0 0 1 0 0 0 1 0 0 0 0 0
0 1 0 0 0 0 0 1 0 1 0 0 0 0
0 1 0 0 0 0 0 1 1 0 0 0 0 0
0 0 1 1 0 0 0 0 0 0 1 0 0 0
1 0 0 1 0 0 0 0 0 0 0 0 1 0
0 1 0 0 1 0 0 0 0 0 0 0 0 1
Cada variable (columna) en la matriz inicial conseguir agrupadas en todos los valores posibles . Si es categórico, cada valor posible se convierte en una nueva columna. Si se trata de un flotante, los valores se agrupan de alguna manera (por ejemplo, siempre se dividen en 10 bandejas). Si es un int, entonces puede ser cualquier valor int posible, o tal vez también binning.
FYI: en mi aplicación real, la tabla tiene hasta 2 millones de filas, y la matriz completa "expandida" puede tener cientos de columnas.
¿Hay una manera fácil de realizar esta operación?
Por separado, también estaría dispuesto a omitir este paso, ya que estoy tratando de calcular una tabla Burt (que es una matriz simétrica de las tabulaciones cruzadas). ¿Hay alguna manera fácil de hacer algo similar con la función crosstab
? De lo contrario, calcular la tabulación cruzada es solo una simple multiplicación de matrices.
¿Hay una manera de realizar algo similar por un uso inteligente de '' crosstab' o pivot_table' o 'stack' o algo similar? –
Claro, para 'a' y 'c' es fácil: 'pandas.concat ([pandas.crosstab (df.index, [df.a]), pandas.crosstab (df.index, [df.c])] , eje = 1) '.Para 'b', supongo que se puede hacer especificando un 'aggfunc' apropiado en' crosstab' ... – lbolla