Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

431
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda