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

278
Views
Combine 2 columnas de cadenas en pandas con diferentes condiciones en ambas columnas

Tengo 2 columnas en pandas, con datos que se ven así.

 code fx category AXD AXDG.R cat1 AXF AXDG_e.FE cat1 333 333.R cat1 ....

Hay otras categorías pero solo me interesa cat1.

Quiero combinar todo, desde la columna de code , y todo después de . en la columna fx y reemplace la columna de código con la nueva combinación sin afectar las otras filas.

 code fx category AXD.R AXDG.R cat1 AXF.FE AXDG_e.FE cat1 333.R 333.R cat1 .....

Aquí está mi código, creo que tengo que usar expresiones regulares, pero no estoy seguro de cómo combinarlo de esta manera.

 df.loc[df['category']== 'cat1', 'code'] = df[df['category'] == 'cat1']['code'].str.replace(r'[az](?=\.)', '', regex=True).str.replace(r'_?(?=\.)','', regex=True).str.replace(r'G(?=\.)', '', regex=True)

No estoy seguro de cómo seleccionar la segunda columna también. Cualquier ayuda sería muy apreciada.

over 4 years ago · Santiago Trujillo
5 answers
Answer question

0

Podemos obtener el resultado esperado usando split así:

 >>> df['code'] = df['code'] + '.' + df['fx'].str.split(pat=".", expand=True)[1] >>> df code fx category 0 AXD.R AXDG.R cat1 1 AXF.FE AXDG_e.FE cat1 2 333.R 333.R cat1

Para filtrar solo en cat1 , como @anky lo hizo muy bien, podemos agregar una instrucción where :

 >>> df['code'] = (df['code'] + '.' + df['fx'].str.split(pat=".", expand=True)[1]).where(df['category'].eq("cat1"), df['code'])
over 4 years ago · Santiago Trujillo Report

0

Hay otras categorias pero solo me interesa cat1

Puede usar str.split con series.where para agregar la extensión para cat1:

 df['code'] = (df['code'].astype(str).add("."+df['fx'].str.split(".").str[-1]) .where(df['category'].eq("cat1"),df['code']))

 print(df) code fx category 0 AXD.R AXDG.R cat1 1 AXF.FE AXDG_e.FE cat1 2 333.R 333.R cat1
over 4 years ago · Santiago Trujillo Report

0

Puede extract la parte de fx y agregarla al code :

 df['code'] += df['fx'].str.extract('(\..*$)')[0]

producción:

 code fx category 0 AXD.R AXDG.R cat1 1 AXF.FE AXDG_e.FE cat1 2 333.R 333.R cat1

para limitar a cat1 solamente:

 df.loc[df['category'].eq('cat1'), 'code'] += df['fx'].str.extract('(\..*$)')[0]
over 4 years ago · Santiago Trujillo Report

0

Puedes usar Series.str.extract :

 df['code'] = df['code'].astype(str) + np.where(df['category'].eq('cat1'), df['fx'].astype(str).str.extract('(\..+)')[0], '')

Producción:

 >>> df code fx category 0 AXD.R AXDG.R cat1 1 AXF.FE AXDG_e.FE cat1 2 333.R 333.R cat1
over 4 years ago · Santiago Trujillo Report

0

Reemplace los alfanuméricos antes del punto. Agregue el resultado al código de columna.

 df['code'] +=df['fx'].str.replace('(^[\w]+(?=\.))','',regex=True) code fx category 0 AXD.R AXDG.R cat1 1 AXF.FE AXDG_e.FE cat1 2 333.R 333.R cat1
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!