usar tutorial tablas seleccionar recorrer para notebook leer hacer graficar funciones espaƱol documentacion datos data con como columnas python pandas numpy reshape melt

python - tutorial - Derretir la matriz triangular superior de un marco de datos de Pandas



recorrer data frame pandas (2)

A partir de la solución de @jezrael, la indexación booleana sería un enfoque más explícito:

import numpy from pandas import DataFrame df = DataFrame({''a'':[1,.5,.3],''b'':[.5,1,.4],''c'':[.3,.4,1]},index=list(''abc'')) print df,''/n'' keep = np.triu(np.ones(df.shape)).astype(''bool'').reshape(df.size) print df.stack()[keep]

salida:

a b c a 1.0 0.5 0.3 b 0.5 1.0 0.4 c 0.3 0.4 1.0 a a 1.0 b 0.5 c 0.3 b b 1.0 c 0.4 c c 1.0 dtype: float64

Dado un cuadro de datos de pandas cuadrado de la siguiente forma:

a b c a 1 .5 .3 b .5 1 .4 c .3 .4 1

¿Cómo puedo melt sólo el triángulo superior para obtener

Row Column Value a a 1 a b .5 a c .3 b b 1 b c .4 c c 1 #Note the combination a,b is only listed once. There is no b,a listing

Estoy más interesado en una solución de pandas idiomática, un indexador personalizado sería bastante fácil de escribir a mano ... Gracias de antemano por su consideración y respuesta.


Primero convierto los valores más bajos de df a NaN por where y numpy.triu y luego reset_index , reset_index y configuro nombres de columna:

import numpy as np print df a b c a 1.0 0.5 0.3 b 0.5 1.0 0.4 c 0.3 0.4 1.0 print np.triu(np.ones(df.shape)).astype(np.bool) [[ True True True] [False True True] [False False True]] df = df.where(np.triu(np.ones(df.shape)).astype(np.bool)) print df a b c a 1 0.5 0.3 b NaN 1.0 0.4 c NaN NaN 1.0 df = df.stack().reset_index() df.columns = [''Row'',''Column'',''Value''] print df Row Column Value 0 a a 1.0 1 a b 0.5 2 a c 0.3 3 b b 1.0 4 b c 0.4 5 c c 1.0