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

223
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar

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 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