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

227
Visualizações
pandas: reemplace los valores en la columna con el último carácter en el nombre de la columna

Tengo un marco de datos de la siguiente manera:

 import pandas as pd df = pd.DataFrame({'sent.1':[0,1,0,1], 'sent.2':[0,1,1,0], 'sent.3':[0,0,0,1], 'sent.4':[1,1,0,1] })

Estoy tratando de reemplazar los valores distintos de cero con el quinto carácter en los nombres de las columnas (que es la parte numérica de los nombres de las columnas), por lo que el resultado debería ser,

 sent.1 sent.2 sent.3 sent.4 0 0 0 0 4 1 1 2 0 4 2 0 2 0 0 3 1 0 3 4

He intentado lo siguiente pero no funciona,

 print(df.replace(1, pd.Series([i[5] for i in df.columns], [i[5] for i in df.columns])))

Sin embargo, cuando lo reemplazo con el nombre de la columna, el código anterior funciona, por lo que no estoy seguro de qué parte está mal.

 print(df.replace(1, pd.Series(df.columns, df.columns)))
over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Dado que está tratando con 1 y 0, en realidad puede usar simplemente multiplicar el marco de datos por un rango:

 df = df * range(1, df.shape[1] + 1)

Producción:

 sent.1 sent.2 sent.3 sent.4 0 0 0 0 4 1 1 2 0 4 2 0 2 0 0 3 1 0 3 4

O, si desea tomar los números de los nombres de las columnas:

 df = df * df.columns.str.split('.').str[-1].astype(int)
over 4 years ago · Santiago Trujillo Relatório

0

podría usar la multiplicación de cadenas en una matriz booleana para colocar las cadenas según la condición y where restaurar los ceros:

 mask = df.ne(0) (mask*df.columns.str[5]).where(mask, 0)

Para tener números enteros:

 mask = df.ne(0) (mask*df.columns.str[5].astype(int))

producción:

 sent.1 sent.2 sent.3 sent.4 0 0 0 0 4 1 1 2 0 4 2 0 2 0 0 3 1 0 3 4
over 4 years ago · Santiago Trujillo Relatório

0

Y otro, trabajando con una condición arbitraria (aquí s.ne(0) ):

 df.apply(lambda s: s.mask(s.ne(0), s.name.rpartition('.')[-1]))
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