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

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

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 Denunciar

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 Denunciar

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 Denunciar

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 Denunciar

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