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

179
Visualizações
Extraiga valores en el marco de datos donde el nombre del índice es igual al nombre de la columna

Digamos que tengo el siguiente conjunto de datos:

 import numpy as np import pandas as pd d = {'column1': ['a', 'b', 'c'], 'a': [10, 8, 6], 'a1': [1, 2, 3], 'b': [4, 2, 6], 'b1': [1, 4, 8], 'c': [2, 6, 8], 'c1': [2, 1, 8] } data_frame = pd.DataFrame(data=d).set_index('column1')

Lo que quiero lograr es seguir. Sume los valores de cada fila, excluyendo las observaciones donde a=a, a=a1, b=b, b=b1, etc.

Así que en el conjunto de datos final quiero tener algo como esto:

 f={'total': [9, 17, 23]} final_frame = pd.DataFrame(data=f)

Donde 9 = b + b1 + c + c1 y así sucesivamente.

Obviamente, puedo lograr esto con el comando iloc[] en cada fila. Pero mi marco de datos real es bastante grande y, como puede ver, la posición de los elementos ij que deben eliminarse no es constante en las filas (por lo que cada iloc en cada fila será una secuencia diferente, pero consistente).

¿Alguna sugerencia?

Mejor,

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Solución con DataFrame.melt , comapre índices por nombres de columnas sin números y para sum agregadas no iguales:

 df = data_frame.melt(ignore_index=False) df = (df.loc[df['variable'].str.extract('(\D+)', expand=False).ne(df.index), 'value'] .groupby(level=0) .sum() .reset_index(name='total')) print (df) column1 total 0 a 9 1 b 17 2 c 23

Otra idea:

 df = data_frame.copy() df.columns = df.columns.str.extract('(\D+)', expand=False) s = df.groupby(level=0, axis=1).sum().stack() df = s[[a != b for a, b in s.index]].groupby(level=0).sum().reset_index(name='total') print (df) column1 total 0 a 9 1 b 17 2 c 23
over 4 years ago · Santiago Trujillo Relatório

0

Una opción más rápida, en mi opinión, sería evitar aumentar el número de filas (las pruebas son la única forma de confirmar esto):

 data_frame.columns =data_frame.columns.str.split(r'(\d+)', expand = True).droplevel(-1) temp = data_frame.set_index([np.arange(len(data_frame))], append=True).unstack(level=0) filters = [col for col in temp if col[0] != col[-1]] out = temp.loc[:, filters].sum(1) out.to_frame(name='total') total 0 9.0 1 17.0 2 23.0
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