es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Creación de nuevas columnas de marco de datos derivadas de otra.

Tengo un dataframe (atc_df) con una columna llamada ‘atc’ compuesta por cadenas de longitud fija con una estructura fija, y que pueden dividirse en 5 niveles de subcodificación. Aquí hay un ejemplo:

prin    atc

0 Acarbosio A10BF01
1 Aceclofenac M01AB16
2 Aciclovir J05AB01
3 Acido acetilsalicilico B01AC06
4 Acido alendronico M05BA04
… … …
324 Voriconazolo J02AC03
325 Zofenopril C09AA15
326 Zofenopril + idroclorotiazide C09BA15
327 Zolmitriptan N02CC03
328 Zonisamide N03AX15

Tengo una función que, dado un código atc, devolvería una lista de los 5 subcódigos:

def atc_split(atc_str):
atc1 = atc_str[0]
atc2 = atc_str[1:3]
atc3 = atc_str[3]
atc4 = atc_str[4]
atc5 = atc_str[5:7]
return(atc1,atc2,atc3,atc4,atc5)

Dos preguntas:

¿Hay una manera más eficiente / elegante de dividir el código atc en sus cinco subcódigos?

¿Cómo puedo aplicar mejor esta función al dataframe atc_df para agregar cinco nuevas columnas (atc1..atc5) a cada fila?

Gracias.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, hay una forma más eficiente/elegante de dividir el código ATC en sus cinco subcódigos. Puedes utilizar el método str.split() para dividir la cadena en una lista de subcadenas.

    Para aplicar esta función al marco de datos atc_df, puedes usar el método apply(). Esto aplicará la función a cada fila del marco de datos y creará cinco nuevas columnas (atc1..atc5) con los subcódigos correspondientes.

    Ejemplo:

    atc_df[['atc1', 'atc2', 'atc3', 'atc4', 'atc5']] = atc_df['atc'].apply(atc_split)
    

Comments are closed.