Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

219
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!