Extraer cadena de un dataframe comparando con una lista

Estoy tratando de extraer cadenas de un DF en el dataframe de pandas y las cadenas de origen están en una lista de la que tengo que hacer coincidir. Intenté usar un df.str.extract(list1) pero recibí un error de tipos no transitables, creo que la forma en que comparo la lista con el DF no es correcta

Desde

 Col 1 Col 2 1 The date 2 Three has come 3 Mail Sent 4 Done Deal 

A

 Col 1 Col 2 Col 3 1 The date NaN 2 Three has come Three has 3 Mail Sent Mail 4 Done Deal Done 

Mi lista es como abajo

 List1 = ['Three has' , 'Mail' , 'Done' , 'Game' , 'Time has come'] 

Puede utilizar extract con join todos los valores en List por | lo que significa or en regex :

 List1 = ['Three has' , 'Mail' , 'Done' , 'Game' , 'Time has come'] df['Col 3'] = df['Col 2'].str.extract("(" + "|".join(List1) +")", expand=False) print (df) Col 1 Col 2 Col 3 0 1 The date NaN 1 2 Three has come Three has 2 3 Mail Sent Mail 3 4 Done Deal Done 

Otra solución:

 List1 = ['Three has' , 'Mail' , 'Done' , 'Game' , 'Time has come'] df['Col 3'] = df['Col 2'].apply(lambda x: ''.join([L for L in List1 if L in x])) df['Col 3'] = df['Col 3'].mask(df['Col 3'] == '') print (df) Col 1 Col 2 Col 3 0 1 The date NaN 1 2 Three has come Three has 2 3 Mail Sent Mail 3 4 Done Deal Done