Solución escalable para str.contains con lista de cadenas en pandas

Estoy analizando un marco de datos de pandasdf1 que contiene filas de objetos de cadena. Tengo una lista de referencias de palabras clave y necesito eliminar cada fila endf1 que contiene cualquier palabra de la lista de referencias.

Actualmente, lo hago así:

reference_list: ["words", "to", "remove"]
df1 = df1[~df1[0].str.contains(r"words")]
df1 = df1[~df1[0].str.contains(r"to")]
df1 = df1[~df1[0].str.contains(r"remove")]

Lo cual no es escalable a miles de palabras. Sin embargo, cuando lo hago:

df1 = df1[~df1[0].str.contains(reference_word for reference_word in reference_list)]

Doy el errorel primer argumento debe ser una cadena o un patrón compilado.

Siguiendoesta solución, probé:

reference_list: "words|to|remove" 
df1 = df1[~df1[0].str.contains(reference_list)]

Lo cual no genera una excepción pero no analiza todas las palabras eather.

¿Cómo usar efectivamente str.contains con una lista de palabras?

Respuestas a la pregunta(1)

Su respuesta a la pregunta