Python Pandas eliminando la subcadena usando otra columna

He intentado buscar y no puedo encontrar una manera fácil de hacerlo, así que espero que su experiencia pueda ayudar.

Tengo un marco de datos de pandas con dos columnas.

import numpy as np
import pandas as pd

pd.options.display.width = 1000
testing = pd.DataFrame({'NAME':[
    'FIRST', np.nan, 'NAME2', 'NAME3', 
    'NAME4', 'NAME5', 'NAME6'], 'FULL_NAME':['FIRST LAST', np.nan, 'FIRST LAST', 'FIRST NAME3', 'FIRST NAME4 LAST', 'ANOTHER NAME', 'LAST NAME']})

lo que me da

          FULL_NAME   NAME
0        FIRST LAST  FIRST
1               NaN    NaN
2        FIRST LAST  NAME2
3       FIRST NAME3  NAME3
4  FIRST NAME4 LAST  NAME4
5      ANOTHER NAME  NAME5
6         LAST NAME  NAME6

lo que me gustaría hacer es tomar los valores de la columna 'NOMBRE' y eliminarlos de la columna 'NOMBRE COMPLETO' si está allí. Entonces la función volvería

          FULL_NAME   NAME           NEW
0        FIRST LAST  FIRST          LAST
1               NaN    NaN           NaN
2        FIRST LAST  NAME2    FIRST LAST
3       FIRST NAME3  NAME3         FIRST
4  FIRST NAME4 LAST  NAME4    FIRST LAST
5      ANOTHER NAME  NAME5  ANOTHER NAME
6         LAST NAME  NAME6     LAST NAME

Hasta ahora, he definido una función a continuación y estoy usando el método de aplicación. Sin embargo, esto funciona bastante lento en mi gran conjunto de datos y espero que haya una manera más eficiente de hacerlo. ¡Gracias!

def address_remove(x):
    try:
        newADDR1 = re.sub(x['NAME'], '', x[-1])
        newADDR1 = newADDR1.rstrip()
        newADDR1 = newADDR1.lstrip()
        return newADDR1
    except:
        return x[-1]

Respuestas a la pregunta(3)

Su respuesta a la pregunta