Python crea una columna en función de si una cadena es una subcadena en pandas Dataframe

Una de las columnas en mis marcos de datos son nombres de identificadores con una convención de nomenclatura específica. Cuando se ingresó, no se ingresó correctamente. Quería preguntar cómo puedo encontrar palabras clave específicas para ingresar en su propia columna en Python. ¿Tal vez algún tipo de bucle?

Ejemplo

types = ['XYZ', 'OPQ', 'MNO', 'ABC']

df actual:

ID  ID Name
45  I_name_ls_XYZ_random
46  I_22_name_ABC_random
47  I_name_ls_XYZ_random_45
48  I_name_ls_MNO_random
49  I_ls_OPQ_random_name
50  I_name_ls_ABC_random
51  I_name_ls_XYZ_random
52  I_name_MNO_random

Resultado deseado:

ID  ID Name                types
45  I_name_ls_XYZ_random    XYZ
46  I_22_name_ABC_random    ABC
47  I_name_ls_XYZ_random_45 XYZ
48  I_name_ls_MNO_random    MNO
49  I_ls_OPQ_random_name    OPQ
50  I_name_ls_ABC_random    ABC
51  I_name_ls_XYZ_random    XYZ
52  I_name_MNO_random       MNO

Gracia

Respuestas a la pregunta(2)

Su respuesta a la pregunta