Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

428
Vistas
Cómo construir una matriz triangular como df con datos de dataframe

Digamos: tengo un marco de datos como este:

 import pandas as pd df = pd.DataFrame({'a':['a1','a2','a3','a4','a5'],'b':[1,2,3,4,5]})

Producción:

 ab 0 a1 1 1 a2 2 2 a3 3 3 a4 4 4 a5 5

Ahora me gustaría agregar nuevas columnas correspondientes a a1 , a2 , a3 , a4 , a5

 for index, row in df.iterrows(): df[index] = np.NaN

Producción:

 ab 0 1 2 3 4 0 a1 1 NaN NaN NaN NaN NaN 1 a2 2 NaN NaN NaN NaN NaN 2 a3 3 NaN NaN NaN NaN NaN 3 a4 4 NaN NaN NaN NaN NaN 4 a5 5 NaN NaN NaN NaN NaN

¿Cómo puedo generar una matriz triangular en el marco de datos?

Me gustaría la siguiente salida:

 ab 0 1 2 3 4 0 a1 1 a1 a2 a3 a4 a5 1 a2 2 NaN a2 a3 a4 a5 2 a3 3 NaN NaN a3 a4 a5 3 a4 4 NaN NaN NaN a4 a5 4 a5 5 NaN NaN NaN NaN a5

¿Debo construir un marco de datos adicional como una matriz triangular y luego fusionarme? ¿Cuál es la manera más sencilla?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Esto funcionará:

 for i in range(df.shape[0]): df.iloc[i, i+2:] = df['a'][i:]

Producción:

 >>> df ab 0 1 2 3 4 0 a1 1 NaN NaN NaN NaN NaN 1 a2 2 NaN NaN NaN NaN NaN 2 a3 3 NaN NaN NaN NaN NaN 3 a4 4 NaN NaN NaN NaN NaN 4 a5 5 NaN NaN NaN NaN NaN >>> for i in range(df.shape[0]): ... df.iloc[i, i+2:] = df['a'][i:] >>> df ab 0 1 2 3 4 0 a1 1 a1 a2 a3 a4 a5 1 a2 2 NaN a2 a3 a4 a5 2 a3 3 NaN NaN a3 a4 a5 3 a4 4 NaN NaN NaN a4 a5 4 a5 5 NaN NaN NaN NaN a5
over 4 years ago · Santiago Trujillo Denunciar

0

Un enfoque eficiente sería usar numpy ( numpy.tile y numpy.triu ):

 import numpy as np np.triu(np.tile(df['a'].values, (len(df), 1)))

Luego crea un marco de datos y únete:

 df.join(pd.DataFrame(np.triu(np.tile(df['a'].values, (len(df), 1))), index=df.index ).replace({0: pd.NA}))

producción:

 ab 0 1 2 3 4 0 a1 1 a1 a2 a3 a4 a5 1 a2 2 <NA> a2 a3 a4 a5 2 a3 3 <NA> <NA> a3 a4 a5 3 a4 4 <NA> <NA> <NA> a4 a5 4 a5 5 <NA> <NA> <NA> <NA> a5
alternativa
 n = len(df) df.join(pd.DataFrame(np.tile(df['a'].values, (n, 1)), index=df.index ).where(np.triu(np.ones((n, n))).astype(bool)))

producción:

 ab 0 1 2 3 4 0 a1 1 a1 a2 a3 a4 a5 1 a2 2 NaN a2 a3 a4 a5 2 a3 3 NaN NaN a3 a4 a5 3 a4 4 NaN NaN NaN a4 a5 4 a5 5 NaN NaN NaN NaN a5
over 4 years ago · Santiago Trujillo Denunciar

0

Mi solución fue similar a mozway pero no en 3 pasos :)

 import pandas as pd import numpy as np d = { "a":['a1','a2','a3','a4','a5'] } "create dataframe from dict" df = pd.DataFrame(d) indek1 = list(df.index) column1 = df['a'].values lista_tot = [] for k in indek1: lista_tot.append(column1) a = np.triu(lista_tot, 0) df1 = pd.DataFrame(a) print(df1) df = df.join(df1) print(df)
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda